Servlet继承结构及生命周期

1.Servlet继承结构

Servlet——接口

    ↑继承

  GenericServlet——抽象类

      ↑继承

     HttpServlet——抽象类:推荐使用

 

Servlet接口:定义了Servlet的基本功能

         |-GenericServlet:实现了Servlet接口,并且实现了Servlet接口中的大部分方法,但是没有实现Service方法,需要子类去实现

                   |-HttpServlet:继承了GenericServlet,并且实现了service方法,此方法中根据不同的请求方式调用对应的doxxx()方                                                    法,因此我们开发Servlet时,只需要继承HttpServlet并重写doGet()和doPost()方法即可

 

源码继承关系如下:

//Servlet
public interface Servlet {
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy();
}

/

//GenericServlet
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
    private static final long serialVersionUID = 1L;
    private transient ServletConfig config;

    public GenericServlet() {
    }

    public void destroy() {
    }
    ...

//

//HttpServlet
public abstract class HttpServlet extends GenericServlet {
    private static final long serialVersionUID = 1L;
    private static final String METHOD_DELETE = "DELETE";
    private static final String METHOD_HEAD = "HEAD";
    private static final String METHOD_GET = "GET";
    private static final String METHOD_OPTIONS = "OPTIONS";
    private static final String METHOD_POST = "POST";
    private static final String METHOD_PUT = "PUT";
    private static final String METHOD_TRACE = "TRACE";
    private static final String HEADER_IFMODSINCE = "If-Modified-Since";
    private static final String HEADER_LASTMOD = "Last-Modified";
    private static final String LSTRING_FILE = "javax.servlet.http.LocalStrings";
    private static final ResourceBundle lStrings = ResourceBundle.getBundle("javax.servlet.http.LocalStrings");

    public HttpServlet() {
    }
......

2.Servlet生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 通过调用 init () 方法进行初始化。
  • Servlet 调用 service() 方法来处理客户端的请求。
  • Servlet 通过调用 destroy() 方法终止(结束)。
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

 

简单流程为:

2.1创建:Servlet实例是在第一次被访问时创建,创建之后,会立即调用init()方法进行初始化

2.2贮存:初始化结束后,Servlet一直贮存在服务器中,在此期间,如果有请求过来,会调用service方法进行服务,直到服务器关闭

2.3销毁:web应用销毁时随之销毁,在销毁之前会调用destroy方法善后

补充:Servlet的生命周期是指:创建Servlet实例化后响应客户请求直至销毁的全过程。Servlet的生命周期是由Servlet容器管理的,并不是Servlet实例

Servlet生命周期的三个方法:init()--service()--destory()

1.Servlet的创建:Servlet在第一次被访问时就创建了对象,对象的创建(实例化)是由服务器来完成的,并不是init()方法创建的Servlet对象。对象创建后一直驻留在内存中直到服务器关闭或者web应用移除容器时,随着web应用的销毁Servlet对象被销毁掉。

Servlet实例为一个单例对象,从头到尾只有一个,而其创建在于第一次被调用(第一次处理请求),这是一种默认行为。

如果在web.xml中配置了如下代码,那么服务器启动时就能创建该Servlet对象:

<servlet>
   <load-on-startup>1</load-on-startup>

</servlet>

2.当Servlet对象创建后,Servlet容器调用Servlet的init()方法,完成初始化

有时候希望在servlet首次载入时,执行复杂的初始化任务,但并不想每个请求都重复这些任务的时候,用init()方法他在servlet初次创建时被调用,之后处理每个用户的请求时,则不在调用这个方法。因此,他主要用于一次性的初始化,和applet的init方法相同。
由于servlet初始化参数的使用非常依赖于部署描述文件(web.xml),该文件可存放servlet所需要的起始参数以及web应用程序的结构数据。当servlet容器读取web.xml文件内容后。可以将这些起始参数封装成一个对象并在调用init方法时传递个servlet,这个对象就是ServletConfig对象所以我们可以在Servlet内覆写init方法,并通过ServletConfig对象来取得某些初始参数。
以init参数的名称为参数,调用ServletConfig的getInitParameter方法。返回值就是init参数的值

3.当对servlet发起请求时,Servlet容器会调用service()方法处理请求,每次调用Servlet都会导致service()方法的执行

4.服务器关闭或者web应用移除容器时,随着web应用的销毁Servlet对象被销毁掉,在Servlet实例释放后,才会调用destory()方法执行善后操作,并不是destory()方法释放的Servlet实例

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值