跳至主要內容

Servlet

bsfc.tech大约 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应用程序。