Servlet运行周期

来源:互联网 发布:php嵌入html页面 编辑:程序博客网 时间:2024/05/20 00:49
Servlet运行在Servlet容器当中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()、destroy()方法来表示。
Servlet的生命周期包含了下面四个阶段:
(1)加载和实例化
Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。Servlet容器通过类加载器来加载Servlet类,成功加载后,容器创建Servlet实例。因为容器是通过Java反射API来创建Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。
(2)初始化
在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前先完成一些初始化的工作,如建立数据库的连接、获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。
(3)请求处理
Servlet容器调用Servlet的service()方法对请求进行处理。在service()方法中,Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。
(4)服务终止
当容器检测到一个Servlet实例应该从服务器中被移除的时候,容器就调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾回收机制所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。

在整个Servlet的生命周期中,创建Servlet实例、调用实例的init()和destroy()方法都只进行一次,当初始化完成后,Servlet容器会将该实例保存在内存中,通过调用它的service()方法,为接收到的请求服务。下面给出Servlet整个生命周期过程的UML序列图。


如果需要让Servlet容器在启动时即加载Servlet,可以在web.xml文件中配置<load-on-startup>元素。<load-on-startup>元素用来标记容器是否在启动的时候就加载这个Servlet,当值为0或大于0时,表示在启动的时候就加载此Servlet,当值为负数或未指定时,表示Servlet在被选择时才被加载,正数值越小,表示这个Servlet启动的优先级越高。
原创粉丝点击