标签:
- IE通过一个URL连接web服务器;如:http://www.baidu.com/app/servlet1
- IE向服务器发送HTTP请求;
- web服务器解析出IE要访问的主机名www.baidu.com(先查找本机C:\Windows\System32\drivers\etc目录下的hosts文件中,看相应的主机名有没有对应的IP,没有的话,接着查找DNS中相应主机名对应的IP);
- web服务器解析出IE要访问的web应用;app
- web服务器解析出IE要访问的资源;servlet1
- web服务器第一次创建servlet实例对象(如果之前访问过该servlet,web服务器上就已经实例化该servlet了就不需要再进行创建);
- 调用servlet的init方法完成对象初始化;
- 创建代表请求的request和代表响应的response,然后调用servlet的service方法响应客户端的请求;
- service方法执行,根据请求方式来选择执行doGet()或doPost()方法,之后向代表客户端响应的response对象写入向客户机输出的数据(通过response.getOutputStream().write(Byte[] byte)来实现);
- service返回;
- 服务器从response中取出数据,构建出一个HTTP响应;
- 服务器将响应回写给客户机;
- 浏览器解析HTTP响应,提取数据显示。
- 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