您的位置:首页 > Web前端

The Life Cycle of a Servlet

2012-09-12 22:26 330 查看
Servlet的生命周期由Servlet容器管理,包含如下几个步骤:

1. 装载Servlet类;

2. 创建Servlet的实例;

3. 调用Servlet的init()方法;

4. 调用Servlet的service()方法;

5. 调用Servlet的destroy()方法;

第1, 2, 3步属于servlet初始化过程,在Servlet的生命周期中,只会执行一次。

在哪些情形下Servlet会被初始化呢?

1). 在web.xml里配置了<load-on-startup>时,会在容器启动时初始化Servlet;

<web-app>

<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.code.servlets.TestServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

</web-app>


2). 在第一次请求到Servlet时;

3). 服务器管理员可以直接向容器发出初始化Servlet的请求。

第4步会在每次HTTP请求到Servlet时执行。

第5步在容器卸载Servlet时执行。

下图说明了这5个步骤:



装载Servlet类

在调用一个Servlet前,容器必须先装载Servlet的类定义。这个过程和装载其它的类一样。

创建Servlet的实例

装载Servlet类定义后,容器会创建Servlet实例。

通常,Servlet类只有一个实例,并发地处理请求。但如果在web.xml里这样配置,会有多个类的实例:

<web-app>

<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.code.servlets.TestServlet</servlet-class>
</servlet>

<servlet>
<servlet-name>test1</servlet-name>
<servlet-class>com.code.servlets.TestServlet</servlet-class>
</servlet>

</web-app>


调用Servlet的init()方法

创建Servlet实例后,容器会调用实例的init()方法进行初始化。init()方法允许Servlet实例在处理请求前先初始化自身。

可以在web.xml里给Servlet指定初始化参数。

调用Servlet的service()方法

每次Servlet接收到请求时,会调用service() 方法。对于 HttpServlet 的子类来说,通常调用doGet(), doPost() 方法。

Servlet一旦被初始化后, service() 在Servlet的生命周期中会被多次调用。

调用Servlet的destroy()方法

当容器关闭或者重新装载整个web application 时,容器会卸载Servlet,调用它的destroy()方法。这一步骤只执行一次。

destroy()方法一般用于释放不能被垃圾回收机制回收的资源,如数据库的连接。

see also :

http://tutorials.jenkov.com/java-servlets/servlet-life-cycle.html

http://javapapers.com/servlet/servlet-life-cycle-explain/

http://www.stardeveloper.com/articles/display.html?article=2001061901&page=1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Servlet 生命周期