从学习的初步来了解到,sevlet的生命周期分为以下几点:
- Servlet 初始化后调用 init () 方法。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 销毁前调用 destroy() 方法。
- 最后,Servlet 由 JVM 的垃圾回收器进行垃圾回收。
(一)init方法只调用一次,在创建sevlet对象的初期被调用,此时若在方法体中进行标记的输出可以看到工作台处有打印如下文字:
与之对应的在代码中的地方即是在init方法体中进行count的初始化,完成后续计数,在页面的反复刷新中可以看到init中打印的文字只被输出了一次。由此我们也可以知道它只在第一次创建 Servlet 时被调用,在后续每次用户请求时将不会再调用,属于一次性初始化,借由init() 方法简单地创建或加载一些数据,它们将被用于 Servlet 的整个生命周期中,如代码中的count计数变量一样。
(二)service()方法 与init()初始化不同,service()会被调用多次来创建一个新的线程,它是执行程序的主要方法,当服务器每收到一个由servlet容器调用service()方法来处理的来自浏览器的请求,服务器就会产生一个新的线程并调用服务,一般采用从、重写doGet()和doPost()方法,两者的区别在于相较于doGet()方法使用doPost()方法会对输入的信息加密,能够使信息的传输更加隐蔽,不易被截取。而我们在代码采用与init()同样的观察方法,多次刷新页面实践能观察到console中的输出与刷新次数相同,由此说明每一次请求都是包含service方法的一次调用。
(三)与init()方法相同,销毁servlet的destory()方法只会在生命周期结束时被调用,destroy() 方法具体可以让 Servlet 关闭与数据库连接、停止后台的线程,并执行其他类似的清理活动。在destroy()方法被调用之后,servlet 对象将被标记为垃圾回收作为生命周期结束的标志。
servlet生命周期的框架图如下。