理解Servlet的init()、service()与destroy()-JSP笔记-2

环境

  1. Eclipse Java EE IDE for Web Developers. Version: Mars.1 Release (4.5.1)
  2. Apache Tomcat version: 8.0.39

课堂学习目标

实践servlet的init()、service()与destroy()方法,理解servlet生命周期的三个阶段。

开始

我们还是新建一个名为Test的新工程,然后新建一个不带doGet()与doPost()方法的一个基本的servlet,然后我们依次循规蹈矩的手动覆盖重写三个方法,他们分别是init()、service()和destroy()方法,重写后截图如下:

Servlet_1

我们在浏览器地址栏中输入进入Servlet_1的虚拟路径后,控制台下便出现了,调用init()方法的输出信息,然后调用了service()方法的输出信息,这两个方法的调用就是servlet的前两个生命周期,初始化阶段,调用init()方法;响应客户请求阶段,调用service()方法,之后每次刷新浏览器界面会发现只出现调用service()方法的输出结果,如下所示:

service()输出结果

提示:

如果你发现你打不开映射的虚拟路径,浏览器并提示了404错误,请尝试移步这里 ,尝试解决问题。

之后,当我们停止服务器的时候,注意,这不是终止进程,还是有点区别的。

  1. 停止服务器:web应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。
  2. 终止进程:servlet容器被强行终止,来不及调用Servlet的destroy()方法。

我们点击停止服务器后效果图如下所示:

Stop Server

来些总结

Servlet生命周期分为三个阶段:

  1. 初始化阶段,调用init()方法
  2. 响应客户请求阶段,调用service()方法
  3. 终止阶段,调用destroy()方法

Servlet初始化阶段:(在下列时刻Servlet容器装载Servlet)

  1. Servlet容器启动时自动装载某些Servlet。
  2. 在Servlet容器启动后,客户首次向Servlet发送请求。
  3. Servlet类文件被更新后,重新装载Servlet。

Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。

Servlet响应请求阶段:

对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。

Servlet终止阶段:

当web应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。

关于Servlet生命周期与工作原理的更详细的信息,推荐访问这里

Author: bugwz
Link: https://bugwz.com/2016/11/29/jsp-2/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.