Servlet
大约 3 分钟JavaJavaEE
Servlet
Java EE中的Servlet是一种基于Java技术的服务器端组件,用于处理HTTP请求并生成HTTP响应。Servlet运行于支持Java的Web服务器或应用服务器中,充当客户端(通常是Web浏览器)与服务器端资源之间的桥梁。Servlet生命周期包括创建、初始化、服务请求和销毁四个关键阶段,下面将通过示例代码来详细解读。
Servlet生命周期
1. 创建阶段
当首次接收到针对某个Servlet的请求时,Web容器(如Tomcat、Jetty等)会检查是否已经存在该Servlet的实例。如果没有,容器将使用默认无参构造函数创建一个新的Servlet实例。
public class MyServlet extends HttpServlet {
// 无参构造函数由Web容器隐式调用
public MyServlet() {
super();
System.out.println("Servlet实例创建");
}
}
2. 初始化阶段
在Servlet实例创建后,容器会立即调用其init()
方法进行初始化。通常在这个方法中设置一些全局变量、打开数据库连接、加载配置信息等一次性操作。init()
方法在整个Servlet生命周期中只执行一次。
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.println("Servlet初始化");
// 示例:从Servlet配置中获取初始化参数
String myParam = config.getInitParameter("myParam");
System.out.println("初始化参数: " + myParam);
// 示例:进行其他初始化操作,如打开数据库连接
DataSource dataSource = ...; // 初始化数据库连接
}
// 或者覆盖带参数的init()方法
@Override
public void init() throws ServletException {
System.out.println("Servlet初始化");
// ...
}
3. 服务阶段
每当接收到一个针对此Servlet的请求时,容器都会调用Servlet的service()
方法。service()
方法根据请求类型(GET、POST等)自动调用对应的doGet()
、doPost()
等方法。这里以doGet()
为例:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("处理GET请求");
// 获取请求参数
String paramValue = request.getParameter("param");
// 设置响应内容类型
response.setContentType("text/plain;charset=UTF-8");
// 响应数据写入输出流
PrintWriter out = response.getWriter();
out.println("Hello, Servlet! Received parameter: " + paramValue);
out.flush();
out.close();
}
// 类似地,可以覆盖doPost()、doPut()、doDelete()等方法处理其他HTTP方法的请求
4. 销毁阶段
当Web容器决定卸载Servlet(如Web应用关闭、重新部署或容器自身关闭)时,会调用Servlet的destroy()
方法。在此方法中,应释放所有占用的资源,如关闭数据库连接、清理临时文件等。
@Override
public void destroy() {
System.out.println("Servlet销毁");
// 示例:关闭数据库连接
if (dataSource != null) {
try {
dataSource.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
总结
Servlet生命周期的四个阶段——创建、初始化、服务请求和销毁,分别对应了Servlet实例的诞生、准备就绪、处理工作和终结清理。通过覆盖或实现相关生命周期方法,开发者可以控制Servlet在各个阶段的行为,确保资源的有效管理和高效服务。在实际开发中,Servlet通常与JSP、过滤器、监听器等组件一起协作,构建复杂的Web应用程序。