- _nosay
Servlet的生命周期
2017-11-19 11:53:26
生命周期:就是一个对象从创建到销毁的过程。
Servlet的生命周期:Servlet从创建到销毁的过程。
Servlet 接口: javax.servlet.Servlet接口
init(ServletConfig)方法,初始化方法
service(ServletRequest,ServletResponse)方法,每次访问都会调用来处理请求
destory()方法,销毁servlet方法。
HttpServlet接口:javax.servlet.http
继承自Servlet接口,并重新实现了service方法,根据不同请求方式调用不同的处理方法。
service(HttpServletRequest,HttpServletResponse)方法,获取请求方式,分别调用doGet(),或者doPost()方法。
当服务器关闭或者项目被移除服务器,destory方法会执行,生命周期结束。
相关测试代码:
package net.zixue.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(name = "Test4Servlet",urlPatterns = "/test4")
public class Test4Servlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("init 被执行了");
super.init();
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service 被执行了");
super.service(req, resp);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doget 被执行了");
}
@Override
public void destroy() {
System.out.println("destroy 被执行了");
super.destroy();
}
} 第一次执行如图所式:

第二次执行如图所式

关闭服务,执行效果如图所示

注意:Servlet实例是单例的,即无论请求多少次Servlet,最多只有一个Servlet实例,如果是多个客户端并发,同时访问Servlet的时候,服务会启动多个线程分别执行Servletr的service方法。
原因:如果我们每次访问都创建一个Servlet实例,会占用和浪费过多的计算机资源。