生命周期,是一个程序的存在周期,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。