servlet生命周期

ervlet接口的init()方法、service()方法和destroy()方法

  Servlet接口定义了所有Servlet都必须执行的方法。所以这个接口也适用于HttpServlet类。

  事实上,这三个方法也就概括了Servlet的生命周期:

一、初始化时期

  该时期调用了init()方法,当Servlet被Servlet引擎载入后,接下来就会执行init()这个方法,因此我们可以重载这个方法以做一些我们自己的初始化的工作。但不要忘记,自己的init()结束后,要记得呼叫super.init()以完成系统的初始化。

  在Servlet的生命期中,init()方法仅在服务器装入Servlet时被执行一次,此后无论有多少客户机访问这个Servlet,init()都不会被重复执行。

  当init()抛出异常或在规定的一个时间周期内没有返回值时,init()失败,Servlet将无法被服务器装入。

  重载init()方法的基本格式是:

public   void   init(ServletConfig   config)   throws   ServletException   {...}
 

二、执行时期

  在Servlet被载入后,主要通过service()方法对外响应,该方法可以被同时、多次地呼叫。

  由于HttpServlet类有它自己的service()方法,所以对于HttpServlet类而言,它所使用的是自己的service()方法,我们一般所指的service()方法也是指HttpServlet类中的service()方法,当它接收到一个OPTIONS请求时,它会调用doOption()方法,同样,当它接收到一个TRACE请求时,它会调用doTrace()方法。service()方法一般不被重载。通过doOption()方法会决定相应地调用doGet()、doPost()、doPut()、doDelete()这些方法的一种或几种。doOption()方法和doTrace()方法通常也不被重载。

三、结束时期

  当服务器卸载一个Servlet时,它将调用destroy()方法。这个方法给Servlet一个时机清除控制的任何资源(比如内存、文件句柄、线程)。如果你需要在结束时,关闭一些资源,你也可以重载这个方法,同样的,自己的destroy()结束后,要记得呼叫super.destroy()。

  destroy()方法不抛出异常,重载destroy()的格式是:

public   void   destroy(){...}


Servlet引擎并不必需保证一个Servlet在任何时候或在服务开启的任何时候都被载入。Servlet引擎可以自由的在任何时候使用或清除一个Servlet。因此,我们不能依赖一个类或实例来存储重要的信息。
  当Servlet引擎决定卸载一个Servlet时(例如,如果这个引擎被关闭或者需要让资源),这个引擎必须允许Servlet释放正在使用的资源并存储有关资料。为了完成以上工作,引擎会调用Servlet的destroy()方法。  
  在卸载一个Servlet之前,Servlet引擎必须等待所有的service()方法完成或超时结束(Servlet引擎会对超时作出定义)。当一个Servlet被卸载时,引擎将不能给Servlet发送任何请求。引擎必须释放Servlet并完成无用存储单元的收集

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值