Servlet3 - 生命周期

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不要根据成员变量的值进行逻辑判断
posted @   LaViez  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示