0


Servlet生命周期

生命周期,就是一个java对象从最初被创建到最终被销毁经历的所有过程。

一、实例化:Servlet容器创建Servlet的实例

Servlet对象是单例,因为不符合单例测试,所以只能称为伪单例。真单例的构造方法是私有化的,Tomcat服务器是支持多线程的。所以Servlet对象在单实例多线程的环境下运行的。如果Servelet对象中有实例变量,并且实例变量涉及到修改操作,那么这个Servlet对象一定会存在线程安全问题,不建议在Servlet对象中使用实例变量,尽量使用局部变量。

PS:Servlet类的构造方法只执行一次

二、初始化:该容器调用init(ServletConfig)方法

init()方法是Servlet生命的起点,用于创建或打开任何与Servlet相关的资源以及执行初始化工作。

通过调用Servlet的init() 方法来完成初始化工作,这个方法是在Servlet已被创建但向客户端提供服务之前调用的。

当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

init 方法的定义:

public void init() throws ServletException{
    // 初始化代码
}

PS:init()方法只会被调用一次。

三、服务:如果请求Servlet,该容器调用service()方法

service()方法是Servlet中真正处理客户端传过来的请求的方法,它根据HTTP 请求方法(GET/POST/PUT/DELETE等)将请求分发到doGet()、doPost()、doPut()、doDelete() 等方法。

当用户到达Servlet的请求,Servlet容器会创建一个特定于这个请求的ServletRequest对象与ServletResponse对象,并调用Servlet的service方法。service方法会从ServletRequest对象获得客户请求信息,然后处理这个请求,并通过ServletResponse对象向客户返回响应的信息。

service()方法的定义:

public void service(ServletRequest request, ServletResponse response) 
    throws ServletException, IOException{
}

PS:service方法,只要用户请求一次,则执行一次。

doGet()方法的定义:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

doPost()方法的定义:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    doGet(request, response);

}

四、销毁:销毁实例之前调用destory()方法

destroy()方法释放任何在init()方法中打开的与Servlet相关的资源。

容器在销毁Servlet之前需要调用destroy()方法,让Servlet自己释放其占用的系统资源,一旦destroy方法被调用,容器就不会再向这个Servlet发送任何请求消息了。如果容器需要这个Servlet,那么就必须重新创建并初始化一个实例。

destroy()方法的定义:

 public void destroy(){
    // 终止化代码...
 }

PS:destroy()方法只会被调用一次。

总结:

Servlet的生命周期分为:实例化、初始化、服务和销毁四个阶段:

  • 实例化:伪单例的Servlet对象
  • 初始化:servlet实例一旦创建,就开始初始化一些参数配置,我们可以做一些参数配置,比如编码,可以在web.xml或注解中配置
  • 服务:当发送对应的servlet请求时,会调用service()方法,这时不会重新创建servlet实例,也不会调用init()方法
  • 销毁:调用了destroy()方法后,当前servlet实例将会被标记为回收垃圾,会对servlet实例进行清除处理
标签: 服务器 运维

本文转载自: https://blog.csdn.net/m0_67942533/article/details/125054187
版权归原作者 崇令 所有, 如有侵权,请联系我们删除。

“Servlet生命周期”的评论:

还没有评论