Servlet详解---Servlet的生命周期

来源:互联网 发布:sql server 2008 无法 编辑:程序博客网 时间:2024/04/19 08:15

生命周期,是一个程序的存在周期,Servlet由于是受容器的管理,所以容器来决定其生命周期。


Servlet生命周期

Servlet程序是运行在服务器端的一段java程序,其生命周期将受到WEB容器的控制,生命周期包括:加载程序、初始化、服务、销毁、卸载五个部分。



换种方式理解Servlet的生命周期

如果觉得Servlet生命周期不好理解的话,读者可以按照人的生命周期进行对照,每个人的一生都要经历如下步骤:孕育生命、出生、成长、死亡、销毁。


生命周期程序示例:【LifeCycleServlet.java】

package com.skewrain.demo2;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class LifeCycleServlet extends HttpServlet {

    public void init() throws ServletException{

         System.out.println("**1、Servlet初始化 -->init()");

    }

    public void doGet(HttpServletRequest req, HttpServletResponse resp)

              throws ServletException, IOException{

        System.out.println("**2、Servlet服务 -->doGet()、doPost()");

    }

    public void doPost(HttpServletRequest req, HttpServletResponse resp)

              throws ServletException, IOException{

        this.doGet(req,resp);

    }

    public void destroy(){

        System.out.println("**3、Servlet销毁 -->destory()");

        try{

            Thread.sleep(5000);

        }catch(Exception e){}

    }

}

生命周期编写完成之后,就可以配置org\web-inf\web.xml文件了。

<servlet>

    <servlet-name>life</servlet-name>

    <servlet-class>com.skewrain.demo2.LifeCycleServlet</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>life</servlet-name>

    <url-pattern>/LifeCycleServlet</url-pattern>

</servlet-mapping>

打开服务器,打开根目录,在地址栏输入“LifeCycleServlet.java”回车之后,服务器端的内容如下:


在正常情况下,一个Servlet程序是在第一次运行的时候才会初始化。我们将页面刷新两次之后,服务器端的结果如下:


关于销毁的两种情况:

1):容器关闭;

2):一个Servlet长时间不使用。

还有一种开发中的可能性,执行了reload操作。

我们如果关闭容器,将会出现如下结果:


但是,需要特别强调的是,如果现在的程序中覆写了service()方法的话,则doGet和doPost就没用了。


对于HttpServlet类而言,里面的service()方法的主要功能是区分是get请求还是post请求,如果是get请求则调用doGet()方法,如果是post请求,则调用doPost()方法,但是一旦在子类中被覆写之后,则没有了此种区分的能力,所以doGet()和doPost()就都失效了,而且对于doPut之类的方法也都失效了。


实际上,这种做法更像是一种设计的模板操作,因为只需要按照它的要求将方法覆写完成了,那么就可以实现相应的功能。


当然,还有一点需要注意的是,在正常情况下初始化方法是在Servlet第一次使用的时候才调用,如果现在希望容器启动的时候servlet直接进行初始化操作的话,则可以在web.xml中增加一个相应的配置参数,表示的是当容器启动的时候进行加载。


<servlet>

    <servlet-name>life</servlet-name>

    <servlet-class>com.skewrain.demo2.LifeCycleServlet</servlet-class>

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

</servlet>

其中的数字“1”表示Servlet重启的等级。再次重启服务器,我们将看到如下结果:



小结:

1.Servlet生命周期中最为重要的就是service()方法,doGet()和doPost()是专门负责处理请求的。Service()方法尽量不要去覆写,覆写尽量写doPost()和doGet()方法。

2.通过配置web.xml文件可以在服务器启动时自动初始化Servlet。

0 0
原创粉丝点击