生命周期分为四个阶段:实例化,初始化 ,就绪,销毁
阶段1:实例化
即:容器创建Servlet对象
时机1:容器收到请求后,创建servlet对象
时机2:容器启动后,立即创建servlet对象
Web.xml的<servlert> </servlet>中需要配置
<load-on-startup>1</load-on-startup>
阶段2:初始化
容器在创建servlet对象后,调用init方法进行对象的初始化
一般情况下,我们不需要重写此方法,因为父类型GenericServlet
里提供了init方法的实现逻辑。此方法保存了另外一个对象ServletConfig的引用
如果你想初始化一些自定义的属性,我们可以将初始化的值
配置在web.xml里
<init-param>
<param-name>company</param-name>
<param-value>甲骨文</param-value>
</init-param>
<init-param>
<param-name>manager</param-name>
<param-value>冼焯庭</param-value>
</init-param>
ps:<init-param>的位置一定要在<load-on-startup>1</load-on-startup>之上
阶段3:就绪
初始化之后,容器Servlet对象的service方法进行资源分配
阶段4:销毁
容器会根据自己的算法来进行servlet对象的销毁,销毁前一定会调用destroy()方法。因此我们可以重写此方法来完成一些业务逻辑。 卸载程序时或清理缓存时,一定会销毁Servlet对象
如图:
例子:
【1】HelloServlet.java
package com.hyxy.servlet.test;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class HelloServlet extends HttpServlet {
private String company;
private String manager;
private static final long serialVersionUID = 1L;
public HelloServlet(){
System.out.println("-------创建HelloServlet对象--------");
}
@Override
public void service(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
System.out.println("----收到HelloServlet处理业务逻辑----");
System.out.println("company:"+company);
System.out.println("manager:"+manager);
}
public void init() throws ServletException {
System.out.println("-----初始化helloServlet-----");
ServletConfig config = getServletConfig();
company = config.getInitParameter("company");
manager = config.getInitParameter("manager");
}
@Override
public void destroy() {
System.out.println("程序卸载了");
}
}
【2】配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.hyxy.servlet.test.HelloServlet</servlet-class>
<init-param>
<param-name>company</param-name>
<param-value>甲骨文</param-value>
</init-param>
<init-param>
<param-name>manager</param-name>
<param-value>冼焯庭</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>KetteServlet</servlet-name>
<servlet-class>com.hyxy.servlet.test.KetteServlet</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>KetteServlet</servlet-name>
<url-pattern>/KetteServlet</url-pattern>
</servlet-mapping>
</web-app>
【3】把工程部署到tomcat服务器
后台输出结果:
-------创建HelloServlet对象--------
-----初始化helloServlet-----
-------创建KetteServlet对象--------
【4】然后在浏览器中访问:http://localhost:8080/Servlert03/HelloServlet
后台输出结果:
----收到HelloServlet处理业务逻辑----
company:甲骨文
manager:冼焯庭
【5】再把工程从tomcat服务器中删除(销毁过程)
后台运行结果:
程序卸载了
这样就是我们的seevlet的生命周期。