Servlet生命周期
Servlet的生命周期
简介
Servlet的生命周期是由容器管理的,分别经历四个阶段:
阶段 | 次数 | 时机 |
---|---|---|
创建 | 1次 | 第一次请求时,new |
初始化 | 1次 | Servlet实例化之后,init() |
执行服务 | 多次 | 每次请求,service() |
销毁 | 1次 | 停止服务,destroy() |
具体步骤
- 1、加载
在下列时刻会加载Servlet(只执行一次):- 如果已经配置自动加载选项,则在启动服务器时自动加载web.xml文件中设置的
<load-on-start>
; - 服务器启动之后,客户机首次向Servlet发出请求时会加载;
- 重新加载Servlet时会进行一次加载;
- 如果已经配置自动加载选项,则在启动服务器时自动加载web.xml文件中设置的
- 2、实例化
加载Servlet后,服务器创建一个Servlet实例。(只执行一次); - 3、初始化
调用Servlet的init()
方法。在初始化阶段,Servlet初始化参数被传递给Servlet配置对象ServletConfig,(只执行一次); - 4、请求处理
对于到达服务器的客户机请求,服务器创建针对此次请求的一个"请求"对象和一个"响应对象"。
服务器调用Servlet的service()
方法,该方法用于传递"请求"和"响应"对象。
service()
方法从"请求"对象获得请求信息、处理该请求并用"响应"对象的方法将响应回传给客户端。
service()
方法可以调用其他方法来处理请求,例如doGet()、doPost()
或其他方法。
每次请求都会执行该步骤; - 5、销毁
当服务器不需要Servlet,或重新装入Servlet的新实例时,服务器会调用Servlet的destroy()
方法。(只执行一次);
注意事项
- 如果需要Servlet在服务启动时就实例化并初始化,我们可以在servlet的配置中添加load-on-startup配置启动顺序,配置的数字为启动顺序,应避免冲突且应>6;
- 在Servlet中我们一般不要轻易使用成员变量,容易造成给线程安全问题;
- 如果要使用成员变量的话,应当尽量避免对成员变量产生修改;
- 如果产生修改应该注意线程安全问题;
- 自己添加线程安全编码处理,会严重影响效率;
原则,能不用成员变量就不要用!
持续更新,如果错误,欢迎大家指出,共同学习...