【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,让他重新生效

相关推荐
Hx_Ma163 小时前
SpringMVC框架提供的转发和重定向
java·开发语言·servlet
会开花的二叉树15 小时前
吃透Reactor多线程:EventLoop_Channel_ThreadPool协作原理
开发语言·c++·tcp/ip·servlet
Hx_Ma161 天前
SpringMVC返回值
java·开发语言·servlet
切糕师学AI3 天前
Jenkins Pipeline 小解
运维·servlet·jenkins
_周游4 天前
Java8 API 文档搜索引擎_1. 项目简介与模块划分
java·搜索引擎·servlet·maven·intellij-idea
血小板要健康5 天前
Spring IoC & DI (下)
java·前端·spring boot·后端·spring·servlet·java-ee
taihexuelang8 天前
jenkins 部署java项目
java·servlet·jenkins
想你依然心痛8 天前
时序数据库选型指南:开启高效数据管理之旅
struts·servlet·时序数据库
马尔代夫哈哈哈9 天前
Spring Mvc(二)
java·spring boot·spring·servlet·java-ee
凌冰_11 天前
Thymeleaf Maven+Servlet+Mysql图书框架—4(十)
mysql·servlet·maven