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

相关推荐
计算机安禾2 天前
【Linux从入门到精通】第36篇:DNS服务探秘——自己搭建一个内网DNS
linux·运维·servlet
测试那点事儿3 天前
零基础API 接口自动化框架源代码:结构、功能与运行时序
java·servlet·自动化
技术钱4 天前
PyTest配置与API测试用例
servlet·测试用例·pytest
deviant-ART4 天前
HttpServletResponse 中 Header 与 OutputStream 的正确使用顺序(避坑指南)
java·后端·servlet
运维全栈笔记6 天前
零基础掌握Jenkins CI/CD:Java项目自动构建与部署全流程指南
git·servlet·ci/cd·gitee·自动化·jenkins·devops
橙子圆1236 天前
SpringMVC5.0
java·spring·servlet
绿草在线6 天前
01基于 Jakarta EE开发 : Servlet + Thymeleaf图书管理系统
servlet
许彰午7 天前
# 手写一个迷你Tomcat——三步理解Servlet容器的核心原理
java·servlet·tomcat
何中应7 天前
记录一次Jenkins构建任务的坑
java·servlet·jenkins
2401_873479408 天前
物联网设备管理中,IP查询工具怎么评估IP安全性?
物联网·tcp/ip·servlet