第二周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 至关重要。
浙公网安备 33010602011771号