阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Servlet生命周期

103次阅读
没有评论

共计 2068 个字符,预计需要花费 6 分钟才能阅读完成。

一、生命周期概述

所谓 xxx 的生命周期,就是说 xxx 的出生、服务,以及死亡。Servlet 生命周期也是如此!与 Servlet 的生命周期相关的方法有:

​ void init(ServletConfig);

​ void service(ServletRequest,ServletResponse);

​ void destroy();

二、Servlet 的出生

服务器会在 Servlet 第一次被访问时创建 Servlet,或者是在服务器启动时创建 Servlet。如果服务器启动时就创建 Servlet,那么还需要在 web.xml 文件中配置。也就是说默认情况下,Servlet 是在第一次被访问时由服务器创建的。

而且一个 Servlet 类型,服务器只创建一个实例对象,例如在我们首次访问 http://localhost:8080/helloservlet/helloworld 时,服务器通过“/helloworld”找到了绑定的 Servlet 名称为 com.tyschollo.servlet.HelloServlet,然后服务器查看这个类型的 Servlet 是否已经创建过,如果没有创建过,那么服务器才会通过反射来创建 HelloServlet 的实例。当我们再次访问 http://localhost:8080/helloservlet/helloworld 时,服务器就不会再次创建 HelloServlet 实例了,而是直接使用上次创建的实例。

在 Servlet 被创建后,服务器会马上调用 Servlet 的 void init(ServletConfig) 方法。请记住,Servlet 出生后马上就会调用 init() 方法,而且一个 Servlet 的一生。这个方法只会被调用一次。这好比小孩子出生后马上就要去剪脐带一样,而且剪脐带一生只有一次。

我们可以把一些对 Servlet 的初始化工作放到 init 方法中!

三、Servlet 服务

当服务器每次接收到请求时,都会去调用 Servlet 的 service() 方法来处理请求。服务器接收到一次请求,就会调用 service() 方法一次,所以 service() 方法是会被调用多次的。正因为如此,所以我们才需要把处理请求的代码写到 service() 方法中!

四、Servlet 的离去

Servlet 是不会轻易离去的,通常都是在服务器关闭时 Servlet 才会离去!在服务器被关闭时,服务器会去销毁 Servlet,在销毁 Servlet 之前服务器会先去调用 Servlet 的 destroy() 方法,我们可以把 Servlet 的临终遗言放到 destroy() 方法中,例如对某些资源的释放等代码放到 destroy() 方法中。

五、测试生命周期方法

修改 HelloServlet 如下,然后再去访问 http://localhost:8080/helloservlet/helloworld

package com.tyschool.servlet.demo; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class HelloServlet implements Servlet {public void init(ServletConfig config) throws ServletException {System.out.println("Servlet 被创建了!"); } public ServletConfig getServletConfig() {return null;} public void destroy() {System.out.println("Servlet 要离去了!"); } public String getServletInfo() {return null;} public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {System.out.println("hello servlet!"); } }

说明:在首次访问 HelloServlet 时,init 方法会被执行,而且也会执行 service 方法。再次访问时,只会执行 service 方法,不再执行 init 方法。在关闭 Tomcat 时会调用 destroy 方法。

测试步骤

​需求:使用 Eclipse 来创建一个 helloservlet 项目

A、在 Eclipse 中创建 helloservlet Web 项目

Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

B、在项目中创建包

Servlet 生命周期

Servlet 生命周期

C、在包中创建 Servlet

Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

d、手动导入 tomcat 运行环境

Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

e、把项目部署到 server 中

Servlet 生命周期
Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

f、浏览器测试

Servlet 生命周期

Servlet 生命周期

补充:用实现 Servlet 接口的方式创建 Servlet

Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

Servlet 生命周期

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-06-06发表,共计2068字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中