首页 > 其他分享 >Servlet 生命周期、工作原理

Servlet 生命周期、工作原理

时间:2023-07-05 16:34:00浏览次数:35  
标签:生命周期 请求 service 对象 方法 HttpServlet 原理 Servlet

Servlet 生命周期、工作原理

Servlet 生命周期:Servlet 加载—>实例化—>服务—>销毁。

init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

Tomcat 与 Servlet 是如何工作的:

步骤:

Web Client 向Servlet容器(Tomcat)发出Http请求

Servlet容器接收Web Client的请求

Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。

Servlet容器创建一个HttpResponse对象

Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。

HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。

HttpServlet调用HttpResponse对象的有关方法,生成响应数据。

Servlet容器把HttpServlet的响应结果传给Web Client。

Servlet工作原理:

1、首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet()、doPost()等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。

2、每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。

3、Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest、ServletResponse 强转为HttpRequest 和 HttpResponse。

创建Servlet对象的时机:

Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。

在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建HttpRequest、HttpResponse对象,从而调用Servlet 对象的service方法。

Servlet Servlet容器在启动时自动创建Servlet,这是由在web.xml文件中为Servlet设置的属性决定的。从中我们也能看到同一个类型的Servlet对象在Servlet容器中以单例的形式存在。

<servlet>
 <servlet-name>Init</servlet-name>
 <servlet-class>org.xl.servlet.InitServlet</servlet-class>
 <load-on-startup>1</load-on-startup>

标签:生命周期,请求,service,对象,方法,HttpServlet,原理,Servlet
From: https://www.cnblogs.com/nifrecxgh/p/17528919.html

相关文章

  • 浅析 Servlet 执行原理
    在JavaWeb学习研究中,Servlet扮演重要的作用,学好它,是后续JavaWeb学习的良好基础。无论是SSH,还是SSM,微服务JavaWeb技术,都应先学好Servlet,从而达到事半功倍的效果,本篇将主要分析Servlet的运行原理。一、UML下图为ServletUML关系图。从图中,可以看出:1.抽象类HttpServlet继承抽象类Gene......
  • Spring Loaded代码热更新实践和原理分析
    1、引言开发者在编码效率和快速迭代中的痛点场景包括:修改代码后,需要频繁重启应用,导致开发效率低下;实时调试时,不能立即看到代码修改的结果;大型项目中,重启的时间成本较高。针对这些问题,本文将深入探讨如何利用SpringLoaded热更新技术提高开发效率,减少编译和重启时间。......
  • hook:beforedestroy - 监听生命周期
    vue中hook的两点使用1.在同一个组件中例如:在mounted中添加一个监听需要在beforeDistroy中移除这个监听,考虑到某些原因你不想再写个beforeDistroy去实现,这时候绿巨人hook就该登场了mounted(){window.addEventListener('online',this.handleOnline)this.$once('hook:be......
  • prometheus描点原理
    大家好,我是蓝胖子,关于prometheus的入门教程有很多,拿我之前学prometheus的经历来讲,看了很多教程,还是会对prometheus的描点以及背后的统计原理感到迷惑,所以今天我们就来分析下这部分,来揭开其神秘的面纱。我们先来看看prometheus里的数据模型是怎么样的,只有知道了数据结构,才能理解......
  • vue渲染原理简单实现
    实现功能:1.渲染系统:·功能一:h函数,用于创建并返回一个VNode(虚拟对象);·功能二:mount函数,用于将VNode挂载到节点上;·功能三:patch函数,用于对比两个VNode,决定该如何处理新的VNode;1.新建一个index.html的页面其中有一个id为app的div元素,之后我们写的所有DOM都会挂载到此元素......
  • jsp+servlet
    1.jsp的执行过程步骤一:翻译(jsp文件翻译成java文件)步骤二:编译(java文件编译成class文件)步骤三:执行(执行class(字节码)文件)2.在jsp中实现日期输出在网页上<%SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddhh:mm:ss");Stringdatenow=sdf.format(newDate())%><%=da......
  • Servlet 执行流程及文件配置。
    目录 1、基本介绍 2、执行流程 3、生命周期 4、Servlet的5个方法 5、体系结构 6、urlPattern配置 7、XML配置1、基本介绍▶简介 Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。使用Servlet就可以实现,根据不同的登录用户在页面上动态显示不同内容......
  • mybatis的原理
    MyBatis是一个持久层框架,它的工作原理是:1.首先,MyBatis从XML映射文件中读取SQL语句,将其解析成SQL语句对象,并将SQL语句对象存储在内存中。2.然后,MyBatis将SQL语句对象与用户提供的参数绑定,生成完整的SQL语句。3.接着,MyBatis将SQL语句发送给数据库,并将查询结果映射到Jav......
  • KD树——k=1时就是BST,里面的数学原理还是有不明白的地方,为啥方差划分?
     Kd-Tree,即K-dimensionaltree,是一棵二叉树,树中存储的是一些K维数据。在一个K维数据集合上构建一棵Kd-Tree代表了对该K维数据集合构成的K维空间的一个划分,即树中的每个结点就对应了一个K维的超矩形区域(Hyperrectangle)。在介绍Kd-tree的相关算法前,我们先回顾一下二叉查找树(BinaryS......
  • ASL单芯片CS5366TypeC转HDMI4K60HZ加HUB多口方案|CS5366带PD拓展方案原理图
    CS5366芯片是ASL集睿致远最新推出的2Len带PD的扩展坞方案芯片,CS5366支持4K60HZ。在分辨率4K下,刷新率60HZ对于30HZ看似提升不多,但是对于应用在游戏主座的客户来说至关重要,现在年轻一代消费力强,也注重享受和体验,博主自己也打游戏,相信大家都知道流畅度的重要性。市面上TypeC扩展坞......