- Servlet 方法生命周期
Servlet 是运行在服务器上的 Java 程序,它提供了动态创建 Web 页面的能力。在 Servlet 的生命周期中,有以下三个阶段:
1.1. 初始化 init()
在 Servlet 被创建后,即在第一次被客户端请求访问时,容器会加载并初始化 Servlet 类,执行 init() 方法。
1.2. 请求处理 service()
服务请求是进入 Servlet 的 service() 方法进行处理的,包括 HTTP 请求和 HTML 表单提交等。在这个方法中,Servlet 会根据请求的方式,调用 doGet()、doPost()、doPut()、doHead()、doTrace() 和 doDelete() 中的一个或多个。需要注意的是,一般情况下,只需要覆盖 doGet() 或 doPost() 方法即可,其他方法可以使用默认实现。
1.3. 销毁 destroy()
在 Web 应用服务器关闭时,容器就会自动调用 Servlet 的 destroy() 方法,释放资源,销毁 Servlet 实例。
-
Servlet 方法执行原理
根据 Java Servlet 规范,每个 Servlet 类只有一个对象,即单例模式。当有客户端请求访问该 Servlet 时,容器将会把请求交给 Servlet 对象,Servlet 会产生对应的 Servlet 实例,并在第一次初始化时调用该类中的init()方法,完成必要的资源准备工作。当 Servlet 对象接收到 HTTP 请求时,容器根据 HTTP 请求的方法类型和 URL 来确定调用对应的 doXXX()方法执行业务逻辑。Servlet 业务逻辑完成后,容器会自动把请求的结果打包,即响应给客户端,此时调用 doXXX() 以外的方法均无用,且会发送错误。最后,当容器关闭或 Servlet 超时时,容器会释放 Servlet 资源,并调用destroy()方法。 -
Servlet 示例说明
3.1. 下载一个文件
以下是 Servlet 中执行下载文件的示例代码:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取文件路径和名称
String path = "d:\\test.txt";
String fileName = "test.txt";
// 设置响应的文件类型并设置响应头
response.setContentType(request.getServletContext().getMimeType(path));
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// 以字节流的方式写出文件
FileInputStream inputStream = new FileInputStream(path);
OutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
}
3.2. 上传一个文件
以下是 Servlet 中上传文件的示例代码:
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上传文件的路径和名称
String path = request.getServletContext().getRealPath("/upload");
String fileName = request.getParameter("fileName");
// 以流的形式获取上传文件,并写入目标文件
InputStream inputStream = request.getInputStream();
OutputStream outputStream = new FileOutputStream(new File(path, fileName));
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
outputStream.close();
}
以上就是 Servlet 方法生命周期及执行原理详解的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Servlet方法生命周期及执行原理详解 - Python技术站