生命周期:是一个程序的存在周期,Servlet由于是受到容器的管理,所以容器来决定其生命周期。
Servlet生命周期:
Servlet程序是运行在服务器端的一段java程序,其生命周期将受到WEB容器的控制,生命周期
包括:加载程序、初始化、服务、销毁、卸载五个部分;
Servlet生命周期对应的方法:
·public void init() throws ServletException-------Servlet 初始化时调用
·public void init(ServletConfig config)
throws ServletException---Servlet初始化时调用,可以通过
ServletConfig读取配置信息;
·public abstract void service(ServletRequest req,
ServletResponse res)throws ServletException,IOException---Servlet服务一般不
会直接
覆盖此方法,而是
使用doGet()和doPost();
如果覆写了service
方法就不用覆写doGet和doPost();
·public void destroy()---------------Servlet 销毁时调用;
1、编写一测试生命周期的程序
package com.lid.servlet;
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 res)
throws ServletException,IOException{
System.out.println("**2、Servlet服务--->doGet()、
doPost()");
}
public void doPost(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException{
this.doGet(req,res);
}
public void destroy(){
System.out.println("**3、Servlet销毁--->destroy()");
try{
Thread.sleep(3000);
}
catch(Exception e){
}
}
}
以上编写了一个完整的Servlet生命周期的测试程序;
2、编译程序;
3、下面修改web.xml 配置servlet的映射路径
<servlet>
<servlet-name>life</servlet-name>
<servlet-class>com.lid.servlet.LifeCycleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>life</servlet-name>
<url-pattern>/LifeCycleServlet</url-pattern>
</servlet-mapping>
4、启动web服务器:注意此时tomcat中没有任何输出;
5、在浏览器中输入:http://localhost/lid/LifeCycleServlet,此时将输出:**1、Servlet初始化---
>init()
**2、Servlet服务---
>doGet()、doPost()
在正常情况下服务器启动是将servlet加载,在servlet第一次被运行(访问)时servlet被初始化;
以后每次访问则只执行servlet服务,因为servlet已经被创建;
关于销毁有两种情况:
·容器关闭
·一个servlet长时间不适用
·还有一种开法中的销毁,执行了reload操作;
但是需要注意如果在程序中覆写了services()方法的话,则doGet()和doPost()就没有用了;
package com.lid.servlet;
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 res) throws
ServletException,IOException{
System.out.println("**2、Servlet服务--->doGet()、doPost()");
}
public void doPost(HttpServletRequest req,HttpServletResponse res) throws
ServletException,IOException{
this.doGet(req,res);
}
public void service(HttpServletRequest req,HttpServletResponse res) throws
ServletException,IOException{
System.out.println("***********服务**************");
}
public void destroy(){
System.out.println("**3、Servlet销毁--->destroy()");
try{
Thread.sleep(3000);
}
catch(Exception e){
}
}
}
servlet都是继承HttpServlet类而言,里面的service()方法的主要功能是区分是get请
求还post请求,
如果是get请求则执行doGet,如果是post请求则执行doPost方法。但是一旦service方法被写,
则就不在
具有此功能了;
实际上,这种做法更像是一种共涉及的模板操作,因为只需要按照它的要求将方法覆写
完成,
那么就可以实现相应的功能;
当然如果想服务器启动的时候servlet就可以直接被初始化的话,则可以在web.xml中增
加一个
相应的参数,表示的是当容器启动的时候就进行初始化;
<servlet>
<servlet-name>life</servlet-name>
<servlet-class>com.lid.servlet.LifeCycleServlet</servlet-
class>
<load-on-startup>1</load-on-startup>
</servlet>
即加上<load-on-startup>1</load-on-startup>其中的数字表示启动的顺序;