The Life Cycle of a Servlet

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 :

转载于:https://my.oschina.net/coda/blog/76855

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值