测试开发进阶——Servlet ——生命周期——概念理解

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 初始化后调用 init () 方法。
  • Servlet 调用 service() 方法来处理客户端的请求。
  • Servlet 销毁前调用 destroy() 方法。
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

init() 方法

init 方法被设计成只调用一次。

它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一样。

Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。

当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。

init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

service() 方法

service() 方法是执行实际任务的主要方法。

Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。

service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

destroy() 方法

destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。

destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。

架构图

下图显示了一个典型的 Servlet 生命周期方案。

  • 第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
  • Servlet 容器在调用 service() 方法之前加载 Servlet。
  • 然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。
Servlet 生命周期

=====================================================

Servlet生命周期表示Servlet从产生到毁灭的过程,一共分为四个阶段分别是:初始化阶段,响应客户请求阶段,终止阶段、垃圾回收阶段。

Servlet生命周期就是指Servlet从产生到毁灭的整个过程

Servlet生命周期

Servlet程序时运行在服务器端的java程序,生命周期收到web容器的控制。在Servlet产生到消亡的过程中一共分为以下四个阶段:

(1)构造方法:该方法只在创建servlet对象时调用并且只调用1次。目的在于证明servlet对象在tomcat服务器中是单实例的。

(2)init方法:在初始化阶段使用,即在创建完servlet对象后就调用,且只调用1次。

(3)service方法:在响应客户请求阶段使用,即每次请求servlet时调用,调用n次。

(4)destroy方法:终止阶段调用,即在servlet对象销毁时调用。只调用1次。tomcat服务器停止或web应用重新部署时调用。

初始化阶段

init方法是在Servlet实例化之后调用init()方法,在整个servlet生命周期中,init()方法只执行一次。

初始化阶段包括建立数据库连接,读取源文件信息等,如果初始化阶段失败,则Servlet将被直接卸载(注意,不是直接销毁,而是直接卸载)。

响应客户请求阶段

当有请求提交时,servlet调用service()方法进行处理。service() 方法是 Servlet 的核心,该方法可以多次调用,每次都是创建一个线程进行调用。

对于service方法,一般不需要重写,因为在HttpServlet中实现,它会根据请求的方式,

调用doGet/doPost也就是说service是用来转向的,所以我们一般写一个servlet,只需要重写doGet或者doPost就可以了。

终止阶段

当WEB容器关闭或检测到一个Servlet要从容器中被删除时,会自动调用destory()方法,释放实例所占用的资源。

注意destory()方法只能调用一次。

通常情况下Servlet容器停止,重新启动都会引起销毁Servlet对象的动作,重新部署项目也会引起Servlet对象的销毁同时会调用destroy方法。

垃圾回收

在销毁后,该实例将等待被垃圾收集器回收,如在被回收前再次使用此servlet,会重新用init()方法初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Servlet 是 JavaEE 规范中的一部分,是处理 Web 请求的组件。Servlet 运行在服务器端,能够接收客户端发来的请求,并给客户端响应结果。下面我们来看看 Servlet 的基本概念和使用方法。 ## 一、Servlet 的基本概念 ### 1.1 Servlet生命周期 Servlet生命周期包含以下三个段: - 初始化段(init):当 Servlet 实例化后,Web 容器会调用其 init() 方法行初始化操作。在此段,Servlet 可以执行一些初始化操作,例如读取配置信息、建立数据库连接等。 - 请求处理段(service):当客户端发来请求时,Web 容器会创建一个线程调用 Servlet 的 service() 方法处理请求。在此段,Servlet 可以获取请求参数、处理请求并生成响应数据。 - 销毁段(destroy):当 Web 应用停止或 Servlet 被卸载时,Web 容器会调用 Servlet 的 destroy() 方法行清理工作。在此段,Servlet 可以释放资源、关闭数据库连接等。 ### 1.2 Servlet 的配置 在使用 Servlet 时,需要在 web.xml 文件中行配置。以下是一个 Servlet 的基本配置: ```xml <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> ``` 其中,servlet-name 表示 Servlet 的名称,servlet-class 表示 Servlet 的类名,url-pattern 表示请求的 URL 匹配规则。 ## 二、Servlet 的使用方法 ### 2.1 编写 Servlet 编写 Servlet 有两种方法:一种是继承 HttpServlet 类,另一种是实现 Servlet 接口。这里以继承 HttpServlet 类为例: ```java public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 GET 请求 PrintWriter out = resp.getWriter(); out.println("Hello, world!"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 POST 请求 PrintWriter out = resp.getWriter(); out.println("Hello, world!"); } } ``` 在 Servlet 中,doGet() 方法用于处理 GET 请求,doPost() 方法用于处理 POST 请求。通过调用 HttpServletResponse 对象的 getWriter() 方法可以向客户端返回响应数据。 ### 2.2 部署 Servlet 将编写好的 Servlet 部署到 Web 容器中,有两种方法:一种是将 Servlet 类打成 war 包放到 Web 容器的 webapps 目录下,另一种是通过 Eclipse 等开发工具将 Servlet 部署到 Web 容器中。部署完成后,可以通过访问 Servlet 的 URL 来测试 Servlet 是否正常工作。 ## 三、总结 本文介绍了 Servlet 的基本概念和使用方法。Servlet 是 Java Web 开发中非常重要的组件,掌握 Servlet 的使用方法对于 Java Web 开发人员来说是必不可少的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值