Servlet 生命周期
一、重写servlet方法
当创建一个类,继承 servlet 这个接口时,需要实现里面的抽象方法。
1 import javax.servlet.*;
2 import java.io.IOException;
3
4 public class ServletDemo implements Servlet {
5
6 /**
7 * 初始化方法,在servlet被创建时,执行,只会执行一次
8 * @param servletConfig
9 * @throws ServletException
10 */
11 @Override
12 public void init(ServletConfig servletConfig) throws ServletException {
13 System.out.println("init...");
14 }
15
16 /**
17 * 获取servletconfig对象
18 * servletConfig:servlet的配置对象
19 * @return
20 */
21 @Override
22 public ServletConfig getServletConfig() {
23 return null;
24 }
25
26 /**
27 * 提供服务方法
28 * 每一次servlet被访问时,执行,执行多次
29 * @param servletRequest
30 * @param servletResponse
31 * @throws ServletException
32 * @throws IOException
33 */
34 @Override
35 public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
36 System.out.println("service...");
37 }
38
39 /**
40 * 获取servlet的一些信息,如版本,作者等。。
41 * @return
42 */
43 @Override
44 public String getServletInfo() {
45 return null;
46 }
47
48 /**
49 * 销毁方法
50 * 在服务器正常关闭时,在servlet被杀死时,被执行,只执行一次
51 */
52 @Override
53 public void destroy() {
54 System.out.println("destory...");
55 }
56 }
二、生命周期
1、被创建时期
当类被创建时,执行 init() 方法,只执行一次。
(1)Servlet什么时候被创建?
默认情况下,第一次访问时,Servlet 被创建
可以配置执行 Servlet 的创建时机。
在 web.xml 中 <servlet> 标签下配置 <load-on-startup>,默认值为 -1。
a、第一次访问时,创建,设置 <load-on-startup>的值为负数
b、在服务器启动时,创建,设置<load-on-startup>的值为0或正整数
1 <!--配置servlet-->
2 <servlet>
3 <!--servlet名称-->
4 <servlet-name>demo1</servlet-name>
5 <!--servlet全类名-->
6 <servlet-class>cn.ks.web.servlet.ServletDemo1</servlet-class>
7 <!-- 创建时机-->
8 <load-on-startup>5</load-on-startup>
9 </servlet>
(2)Servlet的init方法,只执行一次(一般用来加载资源),说明一个Servlet在内存中只存在一个对象,Servlet是单例的
a、多个用户同时访问时,可能存在线程安全问题。
b、解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值
2、服务时期
该时期执行 service() 方法来提供服务,这个方法可以执行多次。每次访问 servlet 时,Service 方法都会被调用一次。
3、销毁时期
被销毁时,执行 destory() 方法,只执行一次
① Servlet被销毁时执行。服务器关闭时,Servlet被销毁
② 只有服务器正常关闭时,才会执行destroy方法。
③ destroy方法在Servlet被销毁之前执行,一般用于释放资源