Servlet的生命周期

来源:互联网 发布:mac上怎么编辑文档 编辑:程序博客网 时间:2024/06/05 05:35

Servlet生命周期

一、Servlet的生命周期分为四个阶段:
1、创建servlet实例
2、初始化阶段,调用init()方法
3、响应客户请求阶段,调用service()方法
4、终止阶段,调用destroy()方法

二、下面就分别来介绍这四个阶段:
1、创建servlet实例
在默认情况下Servlet实例是在第一个请求到来的时候创建,以后复用。如果有的Servlet需要复杂的操作需要载初始化时完成,比如打开文件、初始化网络连接等,可以通知服务器在启动的时候创建该Servlet的实例。具体配置例如(web.xml):

<servlet>    <servlet-name>TimeServlet</servlet-name>    <servlet-class>com.test.servlet.TimeServlet</servlet-class>    <load-on-startup>1</load-on-startup></servlet>

附:servlet创建实例方法
Class cla = Class.ForName(“com.exam.servlet”);
Object servlet = cla.newInstance();
Servlet实例是通过tomcat容器创建的,像这种通过newInstance创建的实例,需要一个无参的构造方法,所以servlet的构造方法是无参的。

2、初始化
一旦Servlet实例被创建,Web服务器会自动调用init(ServletConfig config)方法来初始化该Servlet。其中方法参数config中包含了Servlet的配置信息,比如初始化参数,该对象由服务器创建。
(1)如何配置Servlet的初始化参数?
在web.xml中该Servlet的定义标记中,比如:

<servlet>    <servlet-name>TimeServlet</servlet-name>    <servlet-class>com.test.servlet.TimeServlet</servlet-class>    <init-param>        <param-name>user</param-name>        <param-value>eff666</param-value>    </init-param>    <init-param>         <param-name>blog</param-name>         <param-value>http://blog.csdn.net/eff666/</param-value>    </init-param></servlet>

配置了两个初始化参数user和blog它们的值分别为eff666和http://blog.csdn.net/eff666/, 这样以后要修改用户名和博客的地址不需要修改Servlet代码,只需修改配置文件即可。
(2)如何读取Servlet的初始化参数
ServletConfig中定义了如下的方法用来读取初始化参数的信息:
public String getInitParameter(String name)
参数:初始化参数的名称。
返回:初始化参数的值,如果没有配置,返回null。
(3)init(ServletConfig)方法执行次数
在Servlet的生命周期中,该方仅且执行一次。
(4)init(ServletConfig)方法与线程
该方法执行在单线程的环境下,因此开发者不用考虑线程安全的问题。
(5))init(ServletConfig)方法与异常
该方法在执行过程中可以抛出ServletException来通知Web服务器Servlet实例初始化失败。一旦ServletException抛出,Web服务器不会将客户端请求交给该Servlet实例来处理,而是报告初始化失败异常信息给客户端,该Servlet实例将被从内存中销毁。如果在来新的请求,Web服务器会创建新的Servlet实例,并执行新实例的初始化操作。

3、响应客户端请求
(1)service() 方法:
service()方法是主要的方法来执行实际的任务。 servlet容器(如Web服务器)调用service()方法来处理来自客户端(浏览器)的请求,并写格式化响应返回给客户端。
每次服务器接收到一个servlet请求时,服务器产生一个新的线程并调用服务。 service()方法检查HTTP请求类型(GET,POST,PUT,DELETE等),并调用doGet,doPost方法,doPut,doDelete,等适当的方法。下面是这种方法的签名:

public void service(ServletRequest request,  ServletResponse response)       throws ServletException, IOException{}

由容器和服务方法service()方法被调用时调用doGet,doPost方法,doPut,doDelete等适当的方法。所以,service()方法什么都不用做,但你需要重写doGet()或doPost()方法,但取决于你是什么类型的请求从客户端接收。doGet()和doPost()方法是最常用的方法,在每一个服务请求。下面是这两种方式中的签名。
1)doGet() 方法:处理GET请求的结果。

public void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {    // Servlet code}

(2)doPost() 方法:处理POST请求的结果。

public void doPost(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {    // Servlet code}

4、终止阶段
(1)destroy() 方法:
一个servlet的生命周期结束时,destroy()方法只会被调用一次。这个方法可以让你的servlet关闭数据库连接,停止后台线程,释放servlet所占用的资源,并执行其他类似的清理活动的机会。
Servlet对象的destroy()方法被调用后,被标记为垃圾回收。 destroy方法通常被这样定义:

public void destroy() {// Finalization code...Super.destory();  }

到此就介绍完了,不正之处,请指正,谢谢!

0 0
原创粉丝点击