Appearance
J2EE Servlet 生命周期笔记
1. 什么是Servlet生命周期?
初始化阶段:当Servlet被加载到容器中时,
init()
方法会被调用。在此期间,可以进行资源的初始化操作(如数据库连接)。服务请求阶段:每当有新的HTTP 请求到达服务器,并且该请求映射到了这个Servlet 时,
service()
方法会被调用。根据不同的 HTTP 请求方法(GET、POST 等),相应的doGet()
,doPost()
等方法会被自动调用。销毁阶段:当 Servlet 容器决定移除该Servlet 时,会先调用
destroy()
方法,在此期间释放资源(如关闭数据库连接)。
2. 创建一个演示生命周期的Servlet
java
package com.example.servlets;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/lifecycle")
public class LifecycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 初始化阶段
public void init() throws ServletException {
System.out.println("LifecycleServlet: 初始化完成");
// 可以在这里初始化资源,如数据库连接等。
}
// 处理HTTP GET请求
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("LifecycleServlet: 接收到GET请求");
response.setContentType("text/plain");
response.getWriter().println("Hello! 这是一个演示Servlet生命周期的示例。");
}
// 处理HTTP POST请求
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("LifecycleServlet: 接收到POST请求");
response.setContentType("text/plain");
response.getWriter().println("处理了你的POST请求!");
}
// 销毁阶段
public void destroy() {
System.out.println("LifecycleServlet: 正在销毁,释放资源...");
// 在这里可以进行资源的清理工作。
}
}
3. 配置web.xml文件(可选)
如果使用注解 @WebServlet
定义URL映射,则不需要手动配置web.xml。但为了完整性,提供一个示例:
xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>LifeCycleServlet</servlet-name>
<class>com.example.servlets.LifecycleServlet</class>
</servlet>
<servlet-mapping>
<servlet-name>LifeCycleServlet</servlet-name>
<url-pattern>/lifecycle/*</url-pattern>
</servlet-mapping>
</web-app>
4. 运行环境
Tomcat服务器:确保已安装并配置好。
将项目打包为
.war
文件,部署到 Tomcat 的webapps
目录。
启动 Tomcat 后,访问 http://localhost:8080/YourProjectName/lifecycle 来测试 Servlet 是否正常工作。
5. 使用curl调试代码
测试GET请求:
bash
# 发送GET请求
curl http://localhost:8080/YourProjectName/lifecycle/
# 示例输出:
Hello! 这是一个演示Servlet生命周期的示例。
测试POST请求:
bash
# 发送POST请求,使用-d参数添加数据(可选)
curl -X POST http://localhost:8080/YourProjectName/lifecycle/post
# 示例输出:
处理了你的POST请求!
6. 观察生命周期日志
启动 Tomcat 时查看控制台,确认
init()
方法是否被调用。在发送每个HTTP 请求时,观察对应的
doGet
或doPost
是否被执行。当停止或重新启动 Tomcat 服务时,检查是否有
destroy()
方法的输出日志。
7. 注意事项
确保在初始化和销毁阶段正确处理资源管理,避免内存泄漏。
在高并发情况下,注意线程安全问题。虽然每个请求都会被独立处理,但共享资源需要适当的同步机制。