JavaWeb应用和Servlet的生命周期
Posted 芬乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb应用和Servlet的生命周期相关的知识,希望对你有一定的参考价值。
JavaWeb应用的生命周期是由Servlet容器来控制的。包括三个阶段:
1.启动阶段:加载Web应用的有关数据,创建ServletContest对象,对Filter(过滤器)和一些Servlet进行初始化。启动时会:
(1)把web.xml文件中的数据加载到内存中。
(2)为JavaWeb应用创建一个ServletContext对象。
(3)对所有的Filter进行初始化。
(4)对需要在Web应用启动时就被初始化的Servlet进行初始化。
2.运行阶段:为客户端提供服务。
JavaWeb应用最主要的声明阶段,此阶段,所有的Servlet都处于待命状态,随时可以响应客户端的特定请求,提供相应的服务。若客户端请求的Servlet不存在,Servlet容器会先初始化Servlet,然后调用它的Service服务方法。
3.终止阶段:释放Web应用所占用的各种资源。终止时会:
(1)销毁JavaWeb应用中所有处于运行状态的Servlet。
(2)销毁JavaWeb应用中所有处于运行时状态的Filter。
(3)销毁所有与JavaWeb应用相关的对象,如ServlerContext对象等,并且释放Web应用所占用的相关资源。
Servlet的生命周期
- 当Servlet容器启动时,会启动JavaWeb应用,当JavaWeb应用启动后,就处于运行时状态。当Servlet容器被关闭 时,Servlet会先终止所有的JavaWeb应用。
- JavaWeb应用的生命周期由Servlet容器来控制,Servlet作为JavaWeb应用最核心的部件,其生命周期也由Servlet容器来控制。
- Servlet的生命周期分为三个阶段,初始化阶段,运行时阶段和销毁阶段。在javax.servlet.Servlett阶段后中定义了3个方法:init(), service(), destroy(),分别在Servlet的不同阶段被Servlet容器调用。
1.初始化阶段:
(1)Servlet容器加载Srvlet类,吧它的.class文件中的数据读入到内存 中。
(2)Servlet容器创建ServletConfig对象,ServletConfig对象包含类特定Servlet的初始化配置信息,如Servlet的初始参数,此外,Servlet容器还会使得ServletConfig对象与当前Web应用的ServletContext对象关联。
(3)Servlet容器创建Servlet对象。
(4)Servlet容器带哦用Servlet对象的init(ServletConfig config)方法,在Servlet接口的实现类GenericServlet的init(ServletConfig config)方法中,会建立Servlet对象与ServletConfig对象的关联关系。
*********在初始化阶段,创建类Servlet对象和ServletConfig对象,并且Servlet对象与ServletConfig对象关联,而ServletConfig对象有与当前Web应用的ServletContext对象关联。
******** Servlet进入初始化的情况:
- 当前Web应用处于运行时阶段,特定Servlet被客户端首次请求访问,多数Servlet会在这种情况下被Servlet容器初始化。
- 如果在web.xml文件中为一个Servlet设置了<load-on-startup>元素,当Servlet容器启动Servlet所属的Web应用时,会初始化这个Servlet
- 当web应用被重新启动时,Web应用中的所有Servlet都会在特定的时刻重新初始化。
2.运行时阶段:
此阶段,Servlet可以随时响应客户端的请求,当Servlet容器接受到要求访问特定Servlet的客户请求时,Servlet容器会创建针对这个请求的ServletRequest对象和ServletResponse对象,然后调用相应Servlet对象的servlce()方法。service()方法从ServletRequest对象中获得客户请求信息并处理该请求,再通过ServletResponse对象生成响应结果。当Servlet容器把Servlet生成的响应结果发送给客户,Servlet容器就会销毁SevletRequest对象和ServletResponse对象。
3.销毁阶段:
当Web应用被终止时,Servlet容器会先调用Web应用中所有的Servlet对象的destroy()方法,然后再销毁这些Servlet对象,在destroy()方法的实现中可以释放Servlet所占用的资源(如关闭文件输入流和输出流,关闭与数据库的连接等),此外,还会销毁与Servlet对象关联的ServletConfig对象。
以上是关于JavaWeb应用和Servlet的生命周期的主要内容,如果未能解决你的问题,请参考以下文章