【JavaWeb】Servlet_生命周期

目录

生命周期简介

什么是Servlet的生命周期

  • 应用程序中的对象不仅在空间上有层次结构的关系,在时间上也会因为处于程序运行过程中的不同阶段而表现出不同状态和不同行为--这就是对象的生命周期
  • 简单的叙述生命周期,就是对象在容器中从开始创建到销毁的过程

Servlet容器

Servlet对象是Servlet容器创建的,生命周期方法都是由容器(目前我们使用的是Tomcat)调用的,这一点和我们之前所编写的代码有很大不同。在今后的学习中我们会看到,越来越多的对象交给容器或框架来创建,越来越多的方法由容器或框架来调用,开发人员要尽可能多的将精力放在业务逻辑的实现上

Servlet主要的生命周期执行特点

生命周期 对应方法 执行时机 执行次数
构造对象 构造器 第一次请求或者容器启动 1
初始化 init() 构造完毕后 1
处理服务 service(HttpServletRequest req,HttpServletResponse resp) 每次请求 多次
销毁 destory() 容器关闭 1

创建类来演示

打断点

debug运行

可以观察到

实例化实在第一次请求的时候执行,初始化在构造完毕后执行,每次请求都会执行服务

在关闭服务的时候执行销毁

注意:

Servlet在tomcat中是单例的

Servlet的成员变量在多个线程栈之中是共享的

不建议在service方法中修改成员变量,在并发请求时,会引发线程安全问题,加锁会降低性能

如何让Servlet对象在Tomcat启动时就实例化

需要设置loadOnStartup属性,默认值是-1

先使用web.xml实现

启动tomcat

此时多次访问,可以看到不会再进实例化和初始化,每次只执行服务

通过注解方式实现


注意:

找到conf/web.xml,这里的web.xml是所有项目公共的,tomcat将每个项目独有的web.xml中一样的配置抽取成这个conf/web.xml,也就是说如果每个项目中独有的web.xml没写的配置,就在conf/web.xml中找,如果两个都写了,取决于项目独有的web.xml

查看如下配置

可以在配置文件中查找到如下内容

所以建议我们自己从6开始写

DefaultServlet

在刚才的配置文件中有这个 DefaultServlet

这里是/表示除了jsp所有资源,都走它

当客户端访问静态资源时,tomcat会将这些静态资源和所有的servlet进行对比,看是否能对应上,如果都没有匹配上,就将请求交给DefaultServlet进行处理

DefaultServlet 就会根据请求的资源路径去找对应的文件

找到之后,servlet会通过IO流读取这个文件进入程序,并且把文件通过IO流形式放到response上,然后tomcat将该response转成报文响应给客户端

也就是说静态资源都是DefaultServlet来进行加载

SpringMVC框架会自己提供一个Servlet,会造成该DefaultServlet作用丢失,如果不进行调试,这样请求静态资源就会404,此时就需要重新配置DefaultServlet,让他重新生效

相关推荐
游戏23人生2 天前
正则表达式介绍
servlet·正则表达式·unix
一次旅行2 天前
Jenkins实现CI/CD流水线
运维·servlet·ci/cd·jenkins·测试总结
七夜zippoe5 天前
Spring WebFlux核心原理-对比Servlet与响应式模型
java·spring·servlet·长连接·webflux·短连接
小钟不想敲代码9 天前
Python(三)
java·python·servlet
heartbeat..10 天前
Servlet 全面解析(JavaWeb 核心)
java·网络·后端·servlet
Edward1111111111 天前
tomcat_servlet
java·servlet·tomcat
thulium_11 天前
SpringBoot3 配置嵌入Servlet容器
spring boot·servlet
不吃洋葱.12 天前
写servlet详细教程
servlet
韩立学长13 天前
【开题答辩实录分享】以《基于SSM的电影售票管理系统的设计与实现》为例进行选题答辩实录分享
java·spring·servlet
while(1){yan}15 天前
计算器和登录界面(实现前后端互通)
spring boot·spring·servlet·java-ee·tomcat·maven