Servlet生命周期
Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
- Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第4步,否则,执行第2步。
- 装载并创建该Servlet的一个实例对象。
- 调用Servlet实例对象的init()方法。
- 创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
- WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
web.xml中配置Servlet
<servlet>
<servlet-name>helloServlet</servlet-name> //根据servlet-name 即helloServlet, 找到对应的 servlet-class
<servlet-class>servlet.helloServlet</servlet-class>
<load-on-startup>1</load-on-startup> //此属性可在tomcat启动时自动装载servlet,无需请求时再装载,数字代表优先级
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/servlet/helloServlet</url-pattern> // jsp中请求的url,找到对应的servlet-name 即helloServlet
</servlet-mapping>
Servlet的装载
有三种情况下会装载Servlet
- 第一次对Servlet发出请求时。第一次请求servlet时,若servlet实例不存在,会先创建Servlet实例,调用构造函数,初始化init函数。
-
在web.xml中设置 <load-on-startup>,即可在启动tomcat时自动装载。
若设置java <load-on-startup>1</load-on-startup>
其中数字1代表优先级,数字越小优先级越高,在tomcat启动时,会根据优先级来装载Servlet。
-
类文件改变时。经测试发现,当已经装载的servlet类文件改变时(修改servlet的内容时),所有已装载的servlet会销毁 即执行destory,若在web.xml中对servlet已配置<load-on-startup>,则在此时会对这部分servlet进行装载。
所以,我认为应该是当servlet类内容改变时,会destory掉所有已装载的servlet,并根据web.xml的配置重新加载一遍。
参考文章:
http://www.ibm.com/developerworks/cn/java/j-lo-servlet/
http://www.cnblogs.com/xdp-gacl/p/3760336.html
网友评论