六 servlet生命周期

Servlet 生命周期可以描述为servlet的生命跨度,从载入到销毁。

 

在解释servelt生命周期前,先来讨论一些你将在本文中看到的一些术语,这将帮你更快速地理解它。

 

Web Server: 它也被成为Http Server,处理从客户端发来的Http 请求,用Http Response 响应此请求。

 

Web Container: 也称为Servlet容器,Servlet引擎。它与Servlet交互,是Web Server的一部分。它是Web Server的主要组件,管理servlet的生命周期。

 

Servlet的生命周期包含五步:

1) 载入Servlet

2) 创建Servlet实例

3) 调用init()方法

4) 调用service()方法独立响应每个客户的请求

5) 调用destory()方法

 

然我们回到我们的主要话题。这里是servlet生命周期的五个步骤。

 

步骤1:载入servlet

当web server(例如tomcat)启动时,servlet容器部署载入所有的servlet

步骤2:创建servlet实例

一旦所有的servlet被载入,这个servlet容器创建每一个servlet的实例。servlet容器对每个servlet只创建一次,并且所有的这个servlet的请求都被同一个servlet实例处理。

步骤3:调用init()方法

一旦所有的servlet类被实例化,每个servlet的init()方法都会被调用。这个方法初始化这个servlet,有某些初始化参数你可以在部署描述文件(web.xml)中指定。例如,如果一个servlet有个大于0的值,那么它的init()方法在容易启动时会被立刻调用。

 

你可以在web.xml中指定该元素,像这样:

<servlet>

<servlet-name>MyServlet</servlet-name>

<servlet-class>com.beginnersbook.MyServletDemo</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

 

现在这个相应的servlet类com.beginnersbook.MyServletDemo的init()方法在web容器启动时立刻被调用。

 

步骤4:调用service()方法

每次web server接受到servlet的请求时,它就产生一个新的线程来调用service()方法(所以我们经常说的单例多线程就是这个意思)。如果这个servlet是GenericServlet那么这个请求被他自己的service()服务,如果这个servlet是HttpServlet,那么service()方法接受该请求并基于请求类型分发它到对应的成立方法上。

 

例如,如果它是一个Get请求,service()方法将分发此请求到doGet()方法上,通过调用doGet()方法,并带上请求参数。类似地,像Post,Head,Put等请求都会被分发到相应的doPost(),doPut(),doHead()方法上,通过service()方法。

(image)[https://beginnersbook.com/wp-content/uploads/2013/05/Servlet_Life_Cycle.jpg]

 

注意:不像init()方法和destory()方法只被调用一次,service()方法可在生命周期中调用任意多次,只要servlet没有被销毁,对于每个客户端请求service()都会被调用。

 

步骤五:地用destory()方法

当servelt容器关闭(经常发生在我们关闭web server时),它卸载所有的servlet并调用每个初始化的servlet的destory()方法。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章