第二周02

今天深入学习了 Servlet 的生命周期。Servlet 的生命周期由 Servlet 容器(如 Tomcat)管理,分为初始化、服务和销毁三个阶段。
初始化阶段,当 Servlet 容器启动或者 Servlet 被首次请求时,容器会创建 Servlet 实例,并调用其 init () 方法。在 init () 方法中,可以进行一些初始化操作,比如加载配置文件、建立数据库连接等。
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class MyServlet extends HttpServlet {
private Properties configProps;

@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
    try {
        configProps = new Properties();
        FileInputStream fis = new FileInputStream("config.properties");
        configProps.load(fis);
        fis.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

服务阶段,当客户端发送请求时,Servlet 容器会调用 Servlet 的 service () 方法,该方法会根据请求的方法(GET、POST 等)来调用相应的 doGet ()、doPost () 等方法。
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("");
out.println("

Processing GET request

");
out.println("");
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<html><body>");
    out.println("<h1>Processing POST request</h1>");
    out.println("</body></html>");
}

}

销毁阶段,当 Servlet 容器关闭或者 Servlet 需要被重新加载时,容器会调用 Servlet 的 destroy () 方法,在这个方法中可以进行资源清理操作,如关闭数据库连接、释放文件句柄等。
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MyServlet extends HttpServlet {
private Connection connection;

@Override
public void init() throws ServletException {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }
}

@Override
public void destroy() {
    if (connection != null) {
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

}

通过对 Servlet 生命周期的学习,我明白了如何在不同阶段合理地管理资源和处理请求,这对于编写高效、可靠的 Servlet 至关重要。

posted @ 2025-01-21 21:11  Echosssss  阅读(13)  评论(0)    收藏  举报