servlet的运行原理_高铁怎么运行的原理

servlet的运行原理_高铁怎么运行的原理Servlet在容器中的执行过程1.浏览器向服务器发出GET请求2.服务器上的Tomcat接收到该url,根据该url判断为Servlet请求,此时Tomcat将产生两个对象:请求对象(HttpServletRequest)和响应对象(HttpServletResponce)3.Tomcat根据url找到目标Servlet,且创建一个线程4.Tomcat将刚才创建的请求对象和响应对象传递…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Servlet在容器中的执行过程

在这里插入图片描述
1.浏览器向服务器发出GET请求

2.服务器上的Tomcat接收到该url,根据该url判断为Servlet请求,此时Tomcat将产生两个对象:请求对象(HttpServletRequest)和响应对象(HttpServletResponce)

3.Tomcat根据url找到目标Servlet,且创建一个线程

4.Tomcat将刚才创建的请求对象和响应对象传递给该线程

5.Tomcat调用Servlet的service()方法

6.service()方法根据请求类型(本示例为GET请求)调用doGet()(本示例调用doGet())或doPost()方法

7.doGet()执行完后,将结果返回给Tomcat

8.线程被销毁或被放在线程池中

注意:

1.在容器中的每个Servlet原则上只有一个实例

2.每个请求对应一个线程

3.多个线程可作用于同一个Servlet(这是造成Servlet线程不安全的根本原因)

4.每个线程一旦执行完任务,就被销毁或放在线程池中等待回收



Servlet生命周期

Servlet的生命周期是由Tomcat容器管理的

a) 客户发出请求—>Web 服务器转发到Web容器Tomcat;

b) Tomcat主线程对转发来用户的请求做出响应创建两个对象:HttpServletRequest和HttpServletResponse;

c) 从请求中的URL中找到正确Servlet,Tomcat为其创建或者分配一个线程,同时把2创建的两个对象传递给该线程;

d) Tomcat调用Servlet的servic()方法,根据请求参数的不同调用doGet()或者doPost()方法;

e) 假设是HTTP GET请求,doGet()方法生成静态页面,并组合到响应对象里;
Servlet线程结束,Tomcat将响应对象转换为HTTP响应发回给客户,同时删除请求和响应对象。
从该过程中,我们可以理解Servlet的生命周期:Servlet类加载(对应3步);Servlet实例化(对应3步);调用init方法(对应3步);调用service()方法(对应4、5步);;调用destroy()方法(对应6步)。


Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。

Servlet的生命周期包含了下面4个阶段:

(1)加载和实例化

Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当Servlet容器启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例。因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。

(2)初始化

在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。在初始化期间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常来通知容器。ServletException异常用于指明一般的初始化失败,例如没有找到初始化参数;而UnavailableException异常用于通知容器该Servlet实例不可用。例如,数据库服务器没有启动,数据库连接无法建立,Servlet就可以抛出UnavailableException异常向容器指出它暂时或永久不可用。

(3)请求处理

Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成功执行。在service()方法中,Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。在service()方法执行期间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常。如果UnavailableException异常指示了该实例永久不可用,Servlet容器将调用实例的destroy()方法,释放该实例。此后对该实例的任何请求,都将收到容器发送的HTTP 404(请求的资源不可用)响应。如果UnavailableException异常指示了该实例暂时不可用,那么在暂时不可用的时间段内,对该实例的任何请求,都将收到容器发送的HTTP 503(服务器暂时忙,不能处理请求)响应。

(4)服务终止

当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。

在整个Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都只进行一次,当初始化完成后,Servlet容器会将该实例保存在内存中,通过调用它的service()方法,为接收到的请求服务。
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186927.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cookie和session「建议收藏」

    一、cookie和session的介绍cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生。cookie

    2022年3月29日
  • hmacsha256算法原理_一次解析

    hmacsha256算法原理_一次解析需要支持HMACSHA256算法,GitHub找到源码具体地址https://github.com/aperezdc/hmac-sha256/blob/master/hmac-sha256.c移植到目标平台,稍作处理测试ok了,原理:1.输入密钥key和固定的数据(0x36)进行异或操作生成一个64B的数据kx;2.使用kx+输入数据执行sha256算法得到32B的out;3.使用…

    2022年10月22日
  • shell循环语句

    shell循环语句1、for循环语法:for变量in值列表/seq(2210)do命令序列done———————–for((初值;条件;步长))do命令序列done————————for变量in{…}do命令序列done示例:循环创建10个系统账户示例2:批量创建用户用户名存放在users.txt的文件,每…

    2022年7月24日
  • Pycharm设置点击无反应解决办法+Pycharm汉化「建议收藏」

    Pycharm设置点击无反应解决办法+Pycharm汉化「建议收藏」Pycharm汉化后会遇到设置点击无反应的情况。解决办法:1,如果你的lib文件下有汉化包“resources_ch.jar”直接删除就可以了。不过汉化就没了。2,删除原来的汉化包,更换汉化包。把“resources_zh_CN_PyCharm_2019.1_r1.jar”复制到lib文件夹下,记着不需要重命名。附亲测有效的汉化包:链接:https://pan.baidu.c…

    2022年5月20日
  • 频谱仪的更改ip_通过局域网(LAN)读取频谱分析仪图像的方法

    频谱仪的更改ip_通过局域网(LAN)读取频谱分析仪图像的方法频谱分析仪在WiFi产品的开发过程中是一种必不可少的有力工具,是射频工程师的得力助手。通常,工程师使用软盘去读取频谱分析仪的图像,这不仅复杂而且现在软盘也不容易买到,即使买到也未必能用,在这里我给出使用局域网(LAN)访问频谱分析仪图像的方法。今天,我发现了一个不用软盘也能存取频谱分析仪上的图像的方法,我从一开始就觉得,既然频谱分析仪后面留有GPIB和LAN接口,就一定能通过GPIB或者LAN…

    2022年8月11日
  • 2021年调味品行业发展的现状_2020年调味品行业所处阶段

    2021年调味品行业发展的现状_2020年调味品行业所处阶段2021年,受到需求收缩、成本上涨、预期转弱等因素叠加的影响,调味品行业发展面临巨大挑战,多数调味品上市公司发展趋缓。一、调味品上市公司经营现状2021年,16家调味品上市公司营业收入合计为871亿元,营业收入正增长的有12家,占16家上市公司的75%,其中营业收入排名前三位的公司分别是海天味业、梅花生物和安琪酵母,营业收入分别是250亿元、228.4亿元、106.8亿元,分别同比增长9.7%、33.9%、19.5%。2021年中国调味品上市公司营业收入及同比增长资料来源:中国调

    2022年10月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号