servlet的生命周期
2014-05-14 23:49
375 查看
几乎每次面试都会提到这个基础的问题,servlet的生命周期的问题。
今天就自己试试
package app.one.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class helloServlet */ public class helloServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static int i = 0; private static int j = 0; private static int counter = 0; @Override public void init() throws ServletException { super.init(); System.out.println("Init()"+(++i)); } /** * @see HttpServlet#HttpServlet() */ public helloServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = (String) request.getParameter("name"); String pass = request.getParameter("pass"); /*request.setAttribute("name", name); request.setAttribute("pass", pass);*/ /*RequestDispatcher dispatcher = request.getRequestDispatcher("/success.jsp"); dispatcher.forward(request, response);*/ request.getSession().setAttribute("name", name); request.getSession().setAttribute("pass", pass); ++counter; System.out.println("doPost() counter = " + counter); request.getSession().setAttribute("counter", counter); response.sendRedirect("/servlet/success.jsp"); } @Override public void destroy() { super.destroy(); System.out.println("destroy : " + (++j)); } }
i是在init方法中使用的计数器
counter是doPost中的计数器
j是destroy中的计数器
我们在浏览器中打开多个窗口去访问这个servlet下边是服务器生成的log
2014-5-14 23:30:59 org.apache.catalina.startup.Catalina start
信息: Server startup in 220 ms
Init()1
doPost() counter = 1
doPost() counter = 2
doPost() counter = 3
2014-5-14 23:36:54 org.apache.coyote.http11.Http11Protocol pause
信息: Pausing Coyote HTTP/1.1 on http-8080
2014-5-14 23:36:55 org.apache.catalina.core.StandardService stop
信息: Stopping service Catalina
destroy : 1
2014-5-14 23:36:55 org.apache.coyote.http11.Http11Protocol destroy
信息: Stopping Coyote HTTP/1.1 on http-8080
不难看出servlet的生命周期了吧!
Init() 和destroy () 在整个生命周期中只执行一次,也正证明了servlet的单实例 doPost()/doGet()其实是多线程
servlet 从第一次被访问时初始化一个单实例,然后在调用doPost()/doGet()
当其它的页面再次访问同一个servlet时,他一直存在已经被创建的实例,直接调用doPost()/doGet()
当服务器关闭时才会调用destroy () 。到此为止servlet的生命周期结束。
相关文章推荐
- javaEE中servlet基础知识--生命周期和实现的接口
- Servlet和JSP生命周期概述
- Servlet生命周期测试代码2
- Servlet 生命周期、工作原理
- servlet的生命周期
- 第三天:servlet的生命周期
- 博为峰Java技术题 ——JavaEE Servlet 生命周期Ⅰ
- servlet生命周期
- Servlet运行原理以及生命周期
- Servlet的生命周期
- Servlet的生命周期
- Servlet的生命周期 容器的基本工作原理
- Servlet的生命周期
- 面试题——Servlet的生命周期
- Servlet总结(1)--Servlet的生命周期
- Servlet生命周期与工作原理
- 【Head First Servlets and JSP】笔记3:Servlet的生命周期
- Servlet的生命周期
- Servlet学习(一)----Servlet的生命周期以及开发Servlet的三种方法
- Servlet的生命周期