码迷,mamicode.com
首页 > 其他好文 > 详细

Servlet的生命周期

时间:2015-03-11 13:10:33      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

  1. IE通过一个URL连接web服务器;如:http://www.baidu.com/app/servlet1
  2. IE向服务器发送HTTP请求;
  3. web服务器解析出IE要访问的主机名www.baidu.com(先查找本机C:\Windows\System32\drivers\etc目录下的hosts文件中,看相应的主机名有没有对应的IP,没有的话,接着查找DNS中相应主机名对应的IP);
  4. web服务器解析出IE要访问的web应用;app
  5. web服务器解析出IE要访问的资源;servlet1
  6. web服务器第一次创建servlet实例对象(如果之前访问过该servlet,web服务器上就已经实例化该servlet了就不需要再进行创建);
  7. 调用servlet的init方法完成对象初始化;
  8. 创建代表请求的request和代表响应的response,然后调用servlet的service方法响应客户端的请求;
  9. service方法执行,根据请求方式来选择执行doGet()或doPost()方法,之后向代表客户端响应的response对象写入向客户机输出的数据(通过response.getOutputStream().write(Byte[] byte)来实现);
  10. service返回;
  11. 服务器从response中取出数据,构建出一个HTTP响应;
  12. 服务器将响应回写给客户机;
  13. 浏览器解析HTTP响应,提取数据显示。
  14. Servlet的销毁:servlet生成后一直驻留在内存中,直到web服务器停止或该应用被删除的时候,servlet才会被销毁,当其销毁的时候会调用destroy()方法


需要注意的是:

针对客户端的多次Servlet请求,通常情况下服务器只会创建一个Servlet实例对象,也就是说Servlet一旦创建,它就会驻留在内存当中,为后续的其它请求服务,直到web容器退出,Servlet实例才会销毁

在Servlet的整个生命周期内,servlet的init方法只会调用一次.而对Servlet的每一次访问请求都会导致Servlet引擎调用一次service方法.
而且每次都创建新的HttpServletRequest和HttpServletResponse对象,然后将这两个对象作为参数传入service方法,service方法再根据请求方式来决定调用doGet,doPost等方法

如果在web.xml文件中的<Servlet>元素中配置了<load-on-startup>元素,那么web应用在启动时就会装载并创建Servlet的实例对象,以及调用Servlet的init方法

<Servlet>
    <servlet-name>servlet1</servlet-name>
    <servlet-class>com.boco.servlet.Servlet1</servlet-class>
    <load-on-startup>2</load-on-startup>
</Servlet>



这样,就可以为web应用写一个InitServlet,这个Servlet配置为启动时装载,为整个web应用创建必要的数据库表和数据
<load-on-startup>标签中的数据一般为正整数,越小越优先启动

Servlet的生命周期

标签:

原文地址:http://my.oschina.net/lhplj/blog/385211

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!