应用服务器中用于管理Java组件的部分被称为容器,Servlet运行于应用服务器上的Web容器中。当Servlet被部署到应用服务器后,由容器管理Servlet的生命周期,Servlet的生命周期可以分为加载,创建,初始化,处理客户请求和卸载等过程,如图3.2所示。
图3.2 Servlet生命周期
(1)加载:容器通过类的加载器使用Servlet类对应的文件来加载Servlet。
(2)创建:通过调用Servlet的构造函数来创建一个Servlet实例。
(3)初始化:调用init()方法来完成初始化工作,只会调用一次。
(4)处理客户请求:调用service()方法,由请求的method属性值来决定调用doGet()还是调用doPost()方法。
(5)卸载:调用destory()方法,只会被调用一次。
(6)最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收。(www.xing528.com)
init()方法被设计成只执行一次。在第一次创建Servlet对象时被调用,在后续每次用户请求时不再执行。因此,它是用于一次性初始化。Servlet创建于用户第一次调用对应于该Servlet的URL时,但是也可以指定Servlet在服务器第一次启动时被加载。当用户调用一个Servlet时,就会创建一个Servlet实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init()方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。init()方法定义如下:
当Servlet初始化完毕以后,Servlet对象就可以响应并处理用户请求了,在Servlet的生命周期中,大部分的时间是用来处理请求的,当一个请求到来时,Web服务器将会调用Servlet对象的service()方法,service()方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用service()方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。Service方法声明如下:
public void service(ServletRequest request,ServletResponse response);
其中参数request,response都是由Servlet容器创建并传递给service()方法使用。
在HttpServlet中,service()方法将会区分不同的HTTP请求类型,调用相应的doXXX()方法进行处理,比如请求的是HTTP Get方法,将会调用doGet(),而Post方法则会调用doPost()。所以当我们实现一个针对HTTP协议的Servlet时,只需要覆盖相应的doXXX方法,实现业务处理逻辑即可。
destroy()方法只会被调用一次,在Servlet 生命周期结束时被调用。在destroy()方法中可以用于关闭数据库连接,停止后台线程,把Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。在调用 destroy()方法之后,Servlet 对象被标记为垃圾回收。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。