package day09;
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;
/**
* 本例是研究servlet的生命周期的栗子:
*
* @author mzy
*
* 可以看出在我们的servlet只有在初次被访问的时候,才会调用构造方法
* 初始化对象,然后调用init方法;但是这样会造成我们初次访问servlet
* 的时候等待的时间过长!
* 那么有没有什么办法,能让我们在tomcat启动之前就将servlet加载进服
* 务器呢?
* 在web.xml文件的配置中加一个声明:
*
<servlet>
<servlet-name>LifeDemo</servlet-name>
<servlet-class>day09.LifeDemo</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>LifeDemo</servlet-name>
<url-pattern>/servlet/LifeDemo</url-pattern>
</servlet-mapping>
*
* mapping:映射;
* pattern:模式;
*
* 在加上load-on-startup之后,就相当于告诉tomcat这个
* servlet需要在tomcat启动的时候,就加载到服务器中去
* 其中所填的数字代表着这个servlet被加载的优先级;
* 0为最高优先级,依次往后数,优先级越来越小。
*
*
*/
public class LifeDemo extends HttpServlet{
/*
servlet对象被创建了
init方法被调用
service方法被调用
service方法被调用
service方法被调用
在web中一个servlet对象只会被创建一遍(说明是单例的)
一次创建之后就多次服务,并且多个用户访问的话都说支持的(说明它还是多线程的)
但我将这个项目进行重部署的时候(redeploy)或者停掉的时候:就显示servlet对象被销毁了
*/
private static final long serialVersionUID = -1079790774388224018L;
/**
* 1) 构造方法:servlet对象被创建时被调用
*/
public LifeDemo() {
System.out.println("servlet对象被创建了");
}
/**
* 2) 初始化方法
*/
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init方法被调用");
}
/**
* 3) 服务方法
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service方法被调用");
}
/**
* 4) 销毁方法:servlet对象被销毁时调用
*/
@Override
public void destroy() {
System.out.println("servlet对象被销毁了");
}
}