- Servlet 教程
- Servlet - 主页
- Servlet - 概述
- Servlet - 环境设置
- Servlet - 生命周期
- Servlet - 示例
- Servlet - 表单数据
- Servlet - 客户端请求
- Servlet - 服务器响应
- Servlet - Http 代码
- Servlet - 编写过滤器
- Servlet - 例外
- Servlet - Cookie 处理
- Servlet - 会话跟踪
- Servlet - 数据库访问
- Servlet - 文件上传
- Servlet - 处理日期
- Servlet - 页面重定向
- Servlet - 点击计数器
- Servlet - 自动刷新
- Servlet - 发送电子邮件
- Servlet - 包装
- Servlet - 调试
- Servlet - 国际化
- Servlet - 注释
- Servlet 有用资源
- Servlet - 问题与解答
- Servlet - 快速指南
- Servlet - 有用的资源
- Servlet - 讨论
Servlet - 生命周期
Servlet 的生命周期可以定义为从创建到销毁的整个过程。以下是 servlet 遵循的路径。
Servlet 通过调用init()方法进行初始化。
Servlet 调用service()方法来处理客户端的请求。
Servlet 通过调用destroy()方法来终止。
最后,servlet被JVM的垃圾收集器进行垃圾收集。
现在让我们详细讨论生命周期方法。
init() 方法
init 方法仅被调用一次。仅在创建 servlet 时调用它,之后不会为任何用户请求调用它。因此,它用于一次性初始化,就像小程序的 init 方法一样。
Servlet 通常是在用户首次调用与 Servlet 对应的 URL 时创建的,但您也可以指定在服务器首次启动时加载 Servlet。
当用户调用 servlet 时,将创建每个 servlet 的单个实例,每个用户请求都会产生一个新线程,该线程将根据需要移交给 doGet 或 doPost。init() 方法只是创建或加载一些将在 servlet 的整个生命周期中使用的数据。
init 方法定义如下 -
public void init() throws ServletException { // Initialization code... }
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()方法由容器调用,service方法根据需要调用doGet、doPost、doPut、doDelete等方法。因此,您与 service() 方法无关,但您可以根据从客户端收到的请求类型来重写 doGet() 或 doPost() 。
doGet() 和 doPost() 是每个服务请求中最常用的方法。这是这两个方法的签名。
doGet() 方法
GET 请求源自对 URL 的正常请求或源自未指定 METHOD 的 HTML 表单,并且应由 doGet() 方法处理。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet code }
doPost() 方法
POST 请求来自 HTML 表单,该表单专门将 POST 列为 METHOD,并且应由 doPost() 方法处理。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet code }
destroy() 方法
destroy() 方法仅在 servlet 生命周期结束时调用一次。此方法使您的 servlet 有机会关闭数据库连接、停止后台线程、将 cookie 列表或命中计数写入磁盘以及执行其他此类清理活动。
调用 destroy() 方法后,servlet 对象被标记为垃圾回收。destroy 方法定义如下 -
public void destroy() { // Finalization code... }
架构图
下图描述了一个典型的 servlet 生命周期场景。
首先,到达服务器的 HTTP 请求被委托给 servlet 容器。
servlet 容器在调用 service() 方法之前加载 servlet。
然后,servlet 容器通过生成多个线程来处理多个请求,每个线程执行 servlet 的单个实例的 service() 方法。