首页 > 其他分享 >Servlet3 - 生命周期

Servlet3 - 生命周期

时间:2023-01-17 10:15:29浏览次数:29  
标签:初始化 生命周期 请求 Servlet3 实例 线程 Servlet 成员

Servlet的生命周期

init -> service -> destroy

默认情况下,开始容器(Tomcat)后,

第一次请求时,Servlet会进行实例化、初始化(调用 init() ),然后服务

从第二次情况开始,每一次都是服务(调用 service() ),只有第一次访问会初始化

当容器关闭时,其中所有的servlet实例会被销毁,调用销毁方法(调用 destroy() )

servlet-name相同的Servlet实例Tomcat只会创建一个,所有url-pattern传入的请求都有这一个实例响应

  • 优点:系统启动时不进行初始化,提高系统的启动速度
  • 缺点:第一次请求时,需要初始化,响应时间较长
  • 如果需要提高响应速度,需要设置Servlet初始化时机

Servlet初始化时机

  • 默认在第一次接受请求时,实例化,初始化
  • 在web.xml配置文件中,Servlet 下添加 load-on-startup 设置servlet启动先后顺序
  • <load-on-startup 1 /load-on-startup> -> 启动过程中进行实例化、初始化
    • 提高第一次请求的速度

Servlet在容器中是:单例的、线程不安全的

  • 单例:所有请求都是同一个实例去响应
  • 线程不安全:一个线程需要根据这个实例中的某个成员变量值去做逻辑判断,但这个成员变量又可能被另一个线程更改,从而导致第一个线程的执行路径发生变化
  • 尽量不要在Servlet中定义成员变量。如果定义了成员变量,则1不要修改成员变量的值,2不要根据成员变量的值进行逻辑判断

标签:初始化,生命周期,请求,Servlet3,实例,线程,Servlet,成员
From: https://www.cnblogs.com/Ashen-/p/17057061.html

相关文章