Servlet的生命周期详解
  TEZNKK3IfmPf 2023年11月13日 13 0

1. Servlet的继承关系

(1)javax.servlet.Servlet接口

(2)javax.servlet.GenericServlet抽象子类

(3)javax.servlet.http.HttpServlet这个抽象类是GenericServlet抽象子类

2. Servlet接口的源码

public interface Servlet{
    //1.初始化方法
    void init(ServletConfig config);
    //2.服务方法
    void service(ServletRequest request, ServletResponse response);
    //3.销毁方法
    void destroy();
}

3. GenericServlet的源码

public abstract class GenericServlet implements Servlet{
    public void destroy() {
    }
    public void init(ServletConfig config){
        this.config = config;
        this.init();//此处又调用了自己的无参init方法
    }

    //这个无参init方法内部什么都没写。那么将来如果我们有一些初始化的工作需要做,可以重写这个初始化方法
    public void init() throws ServletException {
    }

    //服务方法仍然保持抽象
    public abstract void service(ServletRequest request, ServletResponse response);
}

4. Servlet的生命周期

(1)Servlet生命周期经过4个阶段:实例化、初始化、服务、销毁
(2)实例化 其实就是容器调用 无参构造方法
(3)初始化 其实就是容器调用 init 方法
(4)服务   其实就是容器调用 service 方法
(5)销毁   其实就是容器调用 destroy 方法

(6)代码结论:
    - Servlet默认情况下tomcat在启动的时候,它不会实例化初始化
    - 当第一次给Hello01Servlet发请求时,它会实例化、初始化、服务。以后每次访问都是直接服务,所以所有的客户端请求都共享一个servlet实例,那么servlet实例是线程不安全的。
    - 当tomcat服务器停止时,Hello01Servlet的销毁方法会被执行

5. Servlet的启动时机

(1)默认情况下,每一个Servlet都是在第一次被请求时,容器才会去实例化初始化它
(2)我们可以通过<load-on-startup>来设置servlet的启动时机

6. Servlet的初始化和init方法

(1)在GenericServlet的源码中,我们发现有两个init方法
   那么,如果我们需要做一些初始化的工作,我们最好重写无参的init
(2)ServletConfig表示当前Servlet的配置信息
   config.getInitParameter(key) 表示获取初始化参数
(3)注解方式配置:

    @WebServlet(urlPatterns = "/hello02",
        initParams = {
            @WebInitParam(name = "uname",value = "lina"),
            @WebInitParam(name="count",value = "100")
        })

(4)XML方式的配置:
   

    <servlet>
        <servlet-name>Hello02Servlet</servlet-name>
        <servlet-class>com.suke.servlet.Hello02Servlet</servlet-class>
        <init-param>
            <param-name>uname</param-name>
            <param-value>lina</param-value>
        </init-param>
        <init-param>
            <param-name>count</param-name>
            <param-value>100</param-value>
        </init-param>
        <!--<load-on-startup>1</load-on-startup>-->
    </servlet>

7. ServletContext表示Servlet上下文

(1)获取上下文对象的4种方式
(2)通过上下文对象可以获取上下文参数
         context.getInitParameter(key);

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   9天前   22   0   0 java
  TEZNKK3IfmPf   23天前   36   0   0 java
TEZNKK3IfmPf