Java 之 Servlet中的生命周期

本文详细解析了Servlet的生命周期,包括初始化、服务和销毁三个阶段。介绍了如何通过重写init(), service()和destroy()方法来控制Servlet的行为,并解释了Servlet的单例特性及线程安全问题。
摘要由CSDN通过智能技术生成

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被销毁之前执行,一般用于释放资源  

  

转载于:https://www.cnblogs.com/niujifei/p/11617627.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值