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

相关推荐
tianyuanwo14 小时前
Jenkins × Gerrit 集成:自动触发构建的全流程解析
运维·servlet·jenkins
勿芮介17 小时前
【研发工具】Jenkins镜像源配置问题及解决方案
运维·servlet·jenkins
tang7451639622 天前
Huawei Cloud EulerOS 2.0(x8664)安装 Jenkins
java·servlet·jenkins
砍材农夫3 天前
物联网 基于netty核心实战-心跳保活机制
java·后端·物联网·struts·servlet·netty
李少兄3 天前
深入理解 Web 服务器、Servlet 容器与现代 Java Web 架构
java·服务器·servlet
范什么特西11 天前
idea里面jsp找不到图片
java·开发语言·servlet
多敲代码防脱发12 天前
Spring进阶(Bean的生命周期与Bean的后处理器)
java·服务器·开发语言·spring boot·spring·servlet
甲方大人请饶命12 天前
Java-面向对象进阶之接口与内部类
java·开发语言·servlet
解决问题no解决代码问题14 天前
Quartz 1.6.5
数据库·servlet·oracle