servlet生命周期

embedded/2024/10/18 18:24:26/

生命周期过程介绍

serlvet 是单实例【产生一次,销毁一次】多线程
默认第一次访问的时候,服务器创建 servlet,并调用 init 主方法实现初始化操作,只要请求来的时候,服务器就会自动创建一个线程,去调用 service 方法执行业务逻辑代码,而当 serlvet 被移除的时候服务器正常关闭的时候,服务器调用 servlet 中的 destroy 方法实现销毁操作

生命周期

  • void init(ServletConfig config):初始化
    • 初始化方法
    • 执行者:服务器(tomcat)
    • 执行次数:一次
    • 执行时机:默认第一次访问的时候
  • void service(ServletRequest request,ServletResponse response):服务,处理业务逻辑代码编写
    • 服务
    • 执行者:服务器
    • 执行次数:请求一次执行一次
    • 执行时机:请求来的时候
  • void destroy():销毁
    • 销毁
    • 执行者:服务器
    • 执行次数:只执行一次
    • 执行时机:当servlet被移除的时候或者服务器正常关闭的时候

index.html

	<a href="/a_web/life">3_生命周期</a>

LifeServlet.java

public class LifeServlet implements Servlet {/*** 初始化* 执行者:服务器* 执行次数:一次* 执行时机:默认第一次访问的时候*/public void init(ServletConfig config) throws ServletException {System.out.println("init:出生了");}@Overridepublic ServletConfig getServletConfig() {return null;}/*** 业务逻辑处理* 执行者:服务器* 执行次数:请求一次执行一次* 执行时机:当请求过来的时候*/public void service(ServletRequest req, ServletResponse res) throwsServletException, IOException {System.out.println("service:过程");}@Overridepublic String getServletInfo() {return null;}/*** 销毁* 执行者:服务器* 执行次数:一次* 执行时机:当服务器正常关闭【tomcat点stop时】或是servlet被移除时*/public void destroy() {System.out.println("destroy:销毁");}
}

web.xml

    <servlet><servlet-name>LifeServlet</servlet-name><servlet-class>com.LifeServlet</servlet-class><!-- 值为0或者大于0时,表示容器在应用启动时就加载这个servlet --><load-on-startup>3</load-on-startup></servlet><servlet-mapping><servlet-name>LifeServlet</servlet-name><url-pattern>/life</url-pattern></servlet-mapping>

load-on-startup 说明

如果设置了多个 servlet 的时候,使用 load-on-startup 来指定 servlet 的加载顺序,服务器会根据load-on-startup 的大小依次对 servlet 进行初始化。不过即使我们将 load-on-startup 设置重复也不会出现异常,服务器会自己决定初始化顺序。
主要作用:用来修改 servlet 的初始化时机
写值:正整数(值越大优先级越低)
查看 tocmat 下的 conf 的 web.xml,load-on-startup 默认为 1。
如果访问错误不存在页面,出现 404,响应信息由 tomcat 服务器的 defaultServlet 提供处理提示信息(优先使用我们自已编写方式,如果不能或配置没有,才往上查找 tomcat 进行处理)。
默认访问 index.html 或 jsp,web.xml 帮忙处理有访问列表页,不写也会自动查找 tomcat 里的 web.xml 下的访问列表(及 JspServlet 和 servlet-mapping 匹配 *.jsp 后缀)。

url-pattern

1).完全匹配: /web根项目名称 或/xxx/myservlet (以"/“开始)
2).目录匹配: /xxx/* /* (”/“开始,以”*"结束)
3).后缀名匹配:如: *.jsp 或 .do (以""开始,以字符结尾)
优先级:
完全匹配>目录匹配>后缀名匹配
当 web 项目配置文件里面如果没有指定配置,会自动去 tomcat 的 web.xml 查找,如果请求 javaweb 的项目处理不了,则 tomcat 默认的 servlet 会进行处理(如 index.html,404 页面等)。


http://www.ppmy.cn/embedded/26433.html

相关文章

保姆级教程:实现在mac电脑上获取windows电脑分享的网络文件夹

演示系统&#xff1a;win10 Sonoma 14.4.3 限制条件&#xff1a;两台设备需要在同一局域网内&#xff0c;即同一网络环境。 —————————————————————————————————— 第一步&#xff1a;打开控制面板 -> 找到网络和共享中心 -> 选择更改…

宠物饮水机缺液提醒报警功能如何实现

宠物饮水机是一种专门为宠物设计的设备&#xff0c;用于提供新鲜的水源。这些饮水机通常具有自动供水功能&#xff0c;能够保持水的清洁和新鲜度。宠物饮水机通常包括一个水箱和一个水泵&#xff0c;通过水泵将水从水箱中抽取出来&#xff0c;然后流入一个小水槽或喷水口&#…

写一个简单的程序

思路分析&#xff1a; 1. 导入必要的库 首先&#xff0c;确保你的项目中包含了AWT或Swing库&#xff0c;因为我们将使用它们来创建图形界面。 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import j…

智能科技的飞跃:LLAMA3引领的人工智能新时代

大家好&#xff01;相信大家对于AI&#xff08;人工智能&#xff09;的发展已经有了一定的了解&#xff0c;但你是否意识到&#xff0c;到了2024年&#xff0c;AI已经变得如此强大和普及&#xff0c;带来了我们从未想象过的便利和创新呢&#xff1f;让我们一起来看看AI在这个时…

ArrayList.remove()方法盲区

1、错误用法 1.1、for循环中使用remove(int index)&#xff0c;列表从前往后遍历 如果在for循环中调用了多次ArrayList.remove()&#xff0c;那代码执行结果是不准确的&#xff0c;因为每次每次调用remove函数&#xff0c;ArrayList列表都会改变数组长度&#xff0c;被移除元素…

成为一名LabVIEW软件开发工程师需要具备哪些能力?

成为一名LabVIEW软件开发工程师需要具备以下能力&#xff1a; LabVIEW编程技能: 熟练掌握LabVIEW编程语言和开发环境&#xff0c;包括数据流图编程、事件结构、循环结构等&#xff0c;以及使用LabVIEW中的各种函数和工具箱。 理解电子原理和仪器仪表: 了解电子电路原理、传感器…

MySQL中怎么存放一条记录

2.2.1. MySQL中一行记录是怎么存储的&#xff1f; MySQL的数据存储在那个文件&#xff1f; 每创建一个 database&#xff08;数据库&#xff09;都会在 /var/lib/mysql/ 目录里面创建一个以 database 为名的目录&#xff0c;然后保存表结构和表数据的文件都会存放在这个目录里…

分享一份物联网 SAAS 平台架构设计

一、架构图**** 二、Nginx**** 用于做服务的反向代理。 三、网关**** PaaS平台所有服务统一入口&#xff0c;包含token鉴权功能。 四、开放平台**** 对第三方平台开放的服务入口。 五、MQTT**** MQTT用于设备消息通信、内部服务消息通信。 六、Netty**** Socket通信设…