- _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实例,会占用和浪费过多的计算机资源。