Servlet生命周期
2014-01-05 18:32
323 查看
Servlet生命分为四个阶段:
1.加载
这个阶段由Servlet容器完成。例如tomcat,jetty等。当容器加载一个Servlet后不会立刻实例化它。通常是在用户第一次请求是完成实例化操作。
2.实例化和初始化
在Servlet实例化之后它会调用它的init()方法,在这个方法里可以写上所需的初始化参数,并且该方法只会被调用一次。
*需要注意的是容器创建Servlet实例是通过java反射机制创建的,调用的是默认构造函数,所以编写Servlet类时通常不应提供带参数的构造方法。
3.请求处理
所有的请求都会走service()方法,无论是get请求还是post请求。但是通常情况下你不必关心service方法,你只需要重写HttpServlet类的doGet方法或者doPost方法处理对应的请求。在HttpServlet类中它实现了判断用户请求类型并交给对应的方法进一步处理。
4.服务终止
当容器检测到Servlet实例被销毁时,就会调用destroy()方法。
图 1 Servlet生命周期示意图
*注意:上图中的第2和第3步都是处理用户请求,其实可算做一步。每个request请求都会调用service方法,service方法再解析报头,将请求交给doGet或doPost方法处理。
多的就不说了,上代码
配置好web.xml
启动tomcat,在浏览器中输入http:localhost:8080/testweb/test
控制台输出为
================================
构造方法运行
初始化方法运行
Service方法调用
doGet方法调用
================================
我的eclipse是设置的热部署,当修改Testservlet时,保存就会重新部署,就会看到destory方法被调用了。
Servlet可以设置在web容器启动是就加载并初始化,只要在web.xml里加上<load-on-startup>1</load-on-startup>这个配置,当值为0或者大于0时,表示容器在应用启动时就加载这个servlet,当是一个负数时或者没有指定时,则只是容器在该servlet被选择时才加载。还有就是配置的正数值越小优先级越高。
servlet生命周期基本就是这样子了。
1.加载
这个阶段由Servlet容器完成。例如tomcat,jetty等。当容器加载一个Servlet后不会立刻实例化它。通常是在用户第一次请求是完成实例化操作。
2.实例化和初始化
在Servlet实例化之后它会调用它的init()方法,在这个方法里可以写上所需的初始化参数,并且该方法只会被调用一次。
*需要注意的是容器创建Servlet实例是通过java反射机制创建的,调用的是默认构造函数,所以编写Servlet类时通常不应提供带参数的构造方法。
3.请求处理
所有的请求都会走service()方法,无论是get请求还是post请求。但是通常情况下你不必关心service方法,你只需要重写HttpServlet类的doGet方法或者doPost方法处理对应的请求。在HttpServlet类中它实现了判断用户请求类型并交给对应的方法进一步处理。
4.服务终止
当容器检测到Servlet实例被销毁时,就会调用destroy()方法。
图 1 Servlet生命周期示意图
*注意:上图中的第2和第3步都是处理用户请求,其实可算做一步。每个request请求都会调用service方法,service方法再解析报头,将请求交给doGet或doPost方法处理。
多的就不说了,上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; public TestServlet() { super(); System.out.println("构造方法运行"); } public void init(ServletConfig config) throws ServletException { System.out.println("初始化方法运行"); } public void destroy() { System.out.println("Servlet销毁"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doGet方法调用"); response.getWriter().write("Success!"); } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Service方法调用"); super.service(request, response); } } |
1 2 3 4 5 6 7 8 9 10 | <servlet> <description></description> <display-name>TestServlet</display-name> <servlet-name>TestServlet</servlet-name> <servlet-class>org.test.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> |
控制台输出为
================================
构造方法运行
初始化方法运行
Service方法调用
doGet方法调用
================================
我的eclipse是设置的热部署,当修改Testservlet时,保存就会重新部署,就会看到destory方法被调用了。
Servlet可以设置在web容器启动是就加载并初始化,只要在web.xml里加上<load-on-startup>1</load-on-startup>这个配置,当值为0或者大于0时,表示容器在应用启动时就加载这个servlet,当是一个负数时或者没有指定时,则只是容器在该servlet被选择时才加载。还有就是配置的正数值越小优先级越高。
1 2 3 4 5 6 7 8 9 10 11 | <servlet> <description></description> <display-name>TestServlet</display-name> <servlet-name>TestServlet</servlet-name> <servlet-class>org.test.TestServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> |
servlet生命周期基本就是这样子了。
相关文章推荐
- Servlet 生命周期、工作原理
- Servlet的生命周期(重点)
- 30天学通JAVA WEB Servlet调用图及生命周期
- Servlet生命周期自学笔记二
- servlet1-生命周期
- Java高级篇(四一)------Servlet生命周期
- servlet的定义及其生命周期
- Servlet生命周期
- Servlet生命周期与工作原理
- Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】
- Servlet生命周期例子
- Servlet的生命周期
- Servlet生命周期与工作原理
- servlet的定义及其生命周期
- servlet的生命周期(容器如何管理servlet)
- servlet生命周期
- servlet规范定义的Servlet 生命周期
- Servlet详解---Servlet的生命周期
- Servlet和jsp的生命周期
- Servlet生命周期与Servlet容器