Java第四十二天,Servlet系列(二),Servlet 的生命周期
一、Servlet 方法详解
- init(ServletConfig servletConfig) ===> 初始化方法,在 Servlet 被创建时执行,只会执行一次
- service(ServletRequest servletRequest, ServletResponse servletResponse) ===> 提供服务的方法;每一次 Servlet 被访问时都会执行,执行多次
- destroy() ===> Servlet 被杀死时执行;在服务器被正常关闭时执行
- getServletConfig() ===> 获取 Servlet 的配置对象
- getServletInfo() ===> 获取 Servlet 的信息
二、生命周期
- 创建 ===> 执行 init 方法;仅执行一次
- 提供服务 ===> 执行 service 方法;执行多次
- 销毁 ===> 执行 destroy;仅执行一次
三、琐碎知识点
1.Servlet 的创建时间
默认情况下,第一次被访问时,Servlet 被创建;但是可以配置 <load-on-startup/> 标签指定 Servlet 的创建时间
<!--配置 Servlet-->
<servlet>
<!--配置 Servlet 名称,随便-->
<servlet-name>servletName</servlet-name>
<!--配置 Servlet 对应的全类名-->
<servlet-class>web.servlet.FirstServlet</servlet-class>
<!--指定 Servlet 的创建时间-->
<!--
1.第一次被访问时创建 <load-on-startup/> 被配置为 负数 时生效
2.在服务器启动时创建 <load-on-startup> 配置为 正数或0 时生效
3.<load-on-startup> 默认为 -1
-->
<load-on-startup>0</load-on-startup>
</servlet>
2.Servlet 如何处理多线程问题
Servlet 是单例(init 方法只执行一次)的;因此多个用户同时访问时,可能存在线程安全问题;因为一个对象当中成员变量是被共享的,而方法是不被共享的;因此尽量不要在 Servlet 中定义成员变量;即使定义了成员变量,也不要对其修改(可以获取)
3.destroy 方法的执行时刻
在 Servlet 被销毁之前执行,一般用于释放资源,类似于临终前的遗言