Servlet分析(2)

来源:互联网 发布:nba常规赛mvp数据 编辑:程序博客网 时间:2024/05/09 12:08
四、servlet的生命周期
(1)生命周期的含义:

  servlet容器如何创建servlet对象、如何初始化、如何调用servlet对象的方法完成请求处理以及如何销毁servlet对象的整个过程。

<span style="font-size:12px;">public interface Servlet {     public void init(ServletConfig config) throws ServletException;        public ServletConfig getServletConfig();         public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;    public String getServletInfo();        public void destroy();}</span>


(2)生命周期可以分成四个阶段:

  1)实例化:


   a,含义:容器调用servlet构造器,创建其对象。
   b,什么时候实例化:
    第一种情况: 容器在收到请求之后。

    第二种情况: 容器在启动之后,会预先创建好一些servlet对象。要求这些servlet配置load-on-startup参数。


  2)初始化


   a,含义:容器调用servlet对象的init方法(init(ServletConfig)),【初始化操作,数据库连接,配置文件信息】
   初始化是在实例化之后立即进行的,并且只进行一次。
   b, init(ServletConfig config)方法:

    容器会事先创建好一个符合ServletConfig接口的对象,该对象提供了一个getInitParameter方法来获得servlet的初始化参数(在web.xml文件当中,使用init-param配置的参数)。

ServletConfig接口的对象的作用:Servlet容器通过它向Servlet传递配置信息,这也是为什么它有getInitParameter方法的原因

   c, 如何实现自已的初始化逻辑

    一般只需要override init()方法。因为init(ServletConfig config)方法里面调用了init()方法


例:

<servlet>    <description>This is the description of my J2EE component</description>    <display-name>This is the display name of my J2EE component</display-name>    <servlet-name>HelloWorld</servlet-name>    <servlet-class>org.servlet.HelloWorld</servlet-class>    <init-param>      <param-name>name</param-name>      <param-value>fei</param-value>    </init-param>  </servlet>     <servlet-mapping>    <servlet-name>HelloWorld</servlet-name>    <url-pattern>/servlet/HelloWorld</url-pattern>      </servlet-mapping>

System.out.println(this.getServletConfig().getInitParameter("name"));


  3)就绪/调用


   a,含义:容器收到请求之后,会调用servlet对象的service方法来处理请求。处理客户端的请求

   通过Request获取客户请求,Response来设置响应信息


  4)销毁


   a,含义:容器依据自身的算法,将不再需要的servlet对象删除掉,在删除之前,会调用servlet对象的destroy方法。该方法也只会执行一次。

   b,destroy方法一般不需要去override。

容器检测一个Servlet对象应该从服务中移除的时候调用此方法,


(3)跟生命周期相关的几个接口与类


   a, Servlet接口
    init(ServletConfig config)
    service(ServletRequest req,ServletResponse res)

    destroy()

   b, GenericServlet抽象类

    实现了Servlet接口,主要实现了init,destroy方法。
   c, HttpServlet抽象类 
    继承了GenericServlet,主要实现了service方法。
   会依据请求方式分别调用doGet,doPost方法(HttpServlet抽象类的doGet,doPost方法只是抛出了一个异常,需要子类去override)。
   d, ServletConfig接口
    //获得servlet的初始化参数。
    String getInitParameter(String paraName);

0 0