文章目录
- 1. Servlet的生命周期
- 2. 代码
- 总结
1. Servlet的生命周期
Servlet的生命周期是指Servlet从创建到销毁的整个过程,由Servlet容器管理。Servlet的生命周期通常被划分为几个阶段或步骤:
- 加载和实例化:
当Servlet容器启动时,它会加载Servlet类,并创建Servlet的实例。这个过程可以发生在容器启动时,也可以延迟到容器检测到需要处理请求时进行。
加载和实例化是通过Java的反射API实现的,容器使用普通的Java类加载设施来定位和加载Servlet类。 - 初始化:
初始化阶段通过调用init()方法完成。此方法在Servlet实例创建后、处理请求之前被调用,用于进行一次性设置,如数据库连接的建立、读取配置文件等。
init()方法只在Servlet首次创建时调用一次,而不是每次用户请求时都调用。 - 请求处理:
请求处理阶段通过调用service()方法来实现。当有请求到达Servlet时,容器会将请求和响应对象传递给service()方法,该方法根据请求类型(如GET、POST等)调用相应的doGet()、doPost()等方法来处理业务逻辑。
每次请求都会创建一个新的线程执行service()方法,以确保线程安全。 - 销毁:
销毁阶段通过调用destroy()方法完成。此方法在Servlet不再需要存在时被调用,通常在容器关闭、重新启动或项目重新部署时调用。destroy()方法只在Servlet的生命周期中被调用一次,并且在销毁后,Servlet实例会被垃圾回收器回收。 - 垃圾回收:
在销毁阶段之后,Servlet实例由JVM的垃圾回收器进行回收。如果需要重新启用Servlet,则必须使用新的实例。
Servlet的生命周期包括加载和实例化、初始化、请求处理、销毁和垃圾回收几个阶段。 这些阶段确保了Servlet能够正确地初始化、响应请求、释放资源并最终被回收。每个阶段都有其特定的方法调用,如init()、service()和destroy(),这些方法共同定义了Servlet的行为和生命周期管理机制。
2. 代码
MyServlet:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet(name = "MyServlet", value = "/myservlet")
public class MyServlet extends HttpServlet {public MyServlet() {System.out.println("MyServlet实例化中。。。。");}@Overridepublic void init() throws ServletException {System.out.println("MyServlet init");}@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("MyServlet service");}@Overridepublic void destroy() {System.out.println("MyServlet destroy");}
}
执行访问接口:http://localhost:8080/testServlet/myservlet
运行结果:
停止项目就会输出MyServlet destroy
总结
在初始化的时候可以读取持久化配置数据,初始化一些代价高的资源,如数据库连接;执行其他一次性操作,销毁的时候,关闭数据库等。