Servlet---生命周期
Servlet生命周期
Servlet 程序的生命周期由 tomcat服务器控制的
Servlet 重要的四个生命周期方法
1、什么时候被创建
2、什么时候被调用
3、什么时候被销毁
- 构造方法:
创建servlet对象的时候被调用。默认情况下,第一次访问这个servlet的时候调用构造方法创建对象。==构造方法只被调用一次,servlet对象在tomcat是单实例的这个类的对象只会有一个)。==每次请求的时候会创建一个新的request、response。只调用1次
- init方法
initial 创建完servlet对象时候调用。只调用1次。
- service
每次发出请求时候调用这个方法。调用n次。
- destory
销毁servlet对象的时候调用。停止服务器或者重新部署web应用时候会销毁servlet对象。只调用1次。
示例
右键-Generat-Override Methods可以看到继承关系
利用这段代码查看它的生命周期,每次执行都会在控制台打印。
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/life")
public class LifeServlet extends HttpServlet {
public LifeServlet(){
System.out.println("LifeServlet.LifeServlet");
}
@Override
public void init() throws ServletException {
super.init();
System.out.println("LifeServlet.init");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("LifeServlet.service");
}
@Override
public void destroy() {
super.destroy();
System.out.println("LifeServlet.destroy");
}
}
域名
运行出来是空白,因为除了在后台打印我们没有写入别的命令。
最初的打印界面,构造方法和init只运行1次。
之后每一次点回车运行时只是调用service,每按一次回车执行一次。
这里都能够停止Tomcat运行。
Tomcat停运后销毁。
Filter的生命周期
与service相类似
package filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "hello",urlPatterns = "/*")
public class helloFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("helloFilter.init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("helloFilter.doFilter");
}
@Override
public void destroy() {
System.out.println("helloFilter.destroy");
}
}