JavaWeb篇_09——Tomcat运行过程以及Servlet继承结构

Tomcat运行过程

  1. 用户访问localhost:8888/test/helloword.do,请求被发送到Tomcat,被监听8888端口并处理 HTTP/1.1 协议的Connector获得。
  2. Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
  3. Engine获得请求localhost/test/helloword.do,匹配所有的虚拟主机Host。
  4. Engine匹配到名为localhost的Host虚拟主机来处理/test/helloword.do请求(即使匹配不到会请求交给默认Host处理)。
  5. 匹配到的Context获得请求/helloword.do。
  6. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用HelloWorld的doGet()或doPost().执行业务逻辑、数据存储等程序。
  7. Context把执行完之后的结果通过HttpServletResponse对象返回给Host。
  8. Host把HttpServletResponse返回给Engine。
  9. Engine把HttpServletResponse对象返回Connector。
  10. Connector把HttpServletResponse对象返回给客户Browser。

Servlet继承结构

Servlet接口

  1. init(),创建Servlet对象后立即调用该方法完成一些初始化工作。
  2. service(),处理客户端请求,执行业务操作,利用响应对象响应客户端请求。
  3. destroy(),在销毁Servlet对象之前调用该方法,释放资源。
  4. getServletConfig(),ServletConfig是容器向servlet传递参数的载体。
  5. getServletInfo(),获取servlet相关信息。

ServletConfig接口

  1. String getServletName(),返回 Servlet 的名字,即 web.xml 中 元素的值。
  2. ServletContext getServletContext(),返回一个代表当前 Web 应用的 ServletContext 对象。
  3. String getInitParameter(String name),根据初始化参数名返回对应的初始化参数值。
  4. Enumeration getInitParameterNames(),返回一个 Enumeration 对象,其中包含了所有的初始化参数名。

GenericServle抽象类

GenericServlet是实现了Servlet接口的抽象类。在GenericServlet中进一步的定义了Servlet接口的具体实现,其设计的目的是为了和应用层协议解耦,在GenericServlet中包含一个Service抽象方法。

HttpServlet类

继承自 GenericServlet,针对于处理 HTTP 协议的请求所定制。在 HttpServlet的service() 方法中已经把 ServletReuqest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse。 直接使用 HttpServletRequest 和 HttpServletResponse, 不再需要强转。实际开发中, 直接继承 HttpServlet, 并根据请求方式复写 doXxx() 方法即可。

Servlet的生命周期

Servlet的生命周期是由容器管理的,分别经历三各阶段:

init():初始化

service():服务

destroy():销毁

当客户端浏览器第一次请求Servlet时,容器会实例化这个Servlet,然后调用一次init方法,并在新的线程中执行service方法处理请求。service方法执行完毕后容器不会销毁这个Servlet而是做缓存处理,当客户端浏览器再次请求这个Servlet时,容器会从缓存中直接找到这个Servlet对象,并再一次在新的线程中执行Service方法。当容器在销毁Servlet之前对调用一次destroy方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/142249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

酷柚易汛ERP-购货订单操作指南

1、应用场景 先下购货订单,收货入库后生成购货单。 2、主要操作 2.1 新增购货订单 打开【购货】-【购货订单】新增购货订单。(*为必填项,其他为选填) ① 录入供应商:点击供应商字段框的 ,在弹框中选择供…

买房和租房哪个划算?

目录 1、考虑因素 1. 1费用比较 1.2 资产增值 1.3 税收影响 1.4 灵活性 1.5 贷款利率 1.6 长期计划 1.7 当地市场条件 2、买房计算 2.1等额本息 2.2等额本金 3、租房计算 1、考虑因素 在比较买房和租房哪个更划算时,需要考虑多个因素。以下是一些可以考…

客户下单时如何自动匹配到最近的门店

有些商家有多个门店,当客户下单时,希望能够将客户下的订单分配给最近的门店。下面就具体介绍一下在采云小程中是如何实现的。 首先,为了简便起见,请确定门店高级设置保持着默认设定。因为单独的商品管理模式以及独享的商品信息模…

【milkv】0、duo编译环境搭建

一、开发资料整理 Docker https://hub.docker.com/repository/docker/dreamcmi/cv1800-docker/general GitHub https://github.com/milkv-duo/duo-buildroot-sdk CV181x/CV180x MMF SDK 开发文档汇总 https://developer.sophgo.com/thread/471.html cv181x芯片使用的交叉…

CCF 备忘

一、不错的网站 CCF CCSP 竞赛历年资料 官网 http://118.190.20.162/home.page 二、基础套路 循环输入 数组标记法&#xff08;数组下标-数值 的映射&#xff09; 两个矩阵相乘 map<long long, map<long long, long long> > ans; for(int i1;i<d;i){for(int…

长按事件怎么加定时器

要实现长按事件并加入定时器&#xff0c;你可以结合使用mousedown和mouseup事件&#xff0c;然后在mousedown时启动定时器&#xff0c;在mouseup时停止定时器。以下是一个使用Vue.js的例子&#xff1a; <template><div><p>长按计时器示例: {{ timerValue }}…

【Linux】 ls -l 和 grep

语法:用于显示指定工作目录下之内容 ls [-alrtAFR] [name...]将 /bin 目录以下所有目录及文件详细资料列出: ls -lR /bin将 /usr/local/bin 目录以下所有有关python列出: ls -l /usr/local/bin/ | grep python在使用 ls -l 命令时&#xff0c;第一列的字符表示文件或目录的类…

js 加密解密 cryptojs(对称加密库)

js 加密解密可以使用 crypto-js 这是一个对称加密的库&#xff0c; 可以使用 AES DES 但没有 rsa 等非对称加密的方法 安装方法 npm install crypto-js 它可以进行 MD5 SHA-1 SHA-256 Base64 AES DES 等算法和加密 import crypto from "crypto-js"let md5binary cry…

RT-Thread系列10——ETH网口设备

文章目录 1. ETH测试第一步&#xff1a;cubemx配置。第二步&#xff1a;board.h配置。第三步&#xff1a;rtthread settings配置第四步&#xff1a;以太网复位引脚设置第五步&#xff1a;修改rtthread源码第六步&#xff1a;修改 cubemx 生成的 main 函数第七步&#xff1a;编译…

C++阶段复习‘‘‘‘总结?【4w字。。。】

文章目录 前言类和对象C类定义和对象定义类成员函数C 类访问修饰符公有&#xff08;public&#xff09;成员私有&#xff08;private&#xff09;成员受保护&#xff08;protected&#xff09;成员 继承中的特点类的构造函数和析构函数 友元函数内联函数this指针指向类的指针类…

缩点+图论路径网络流:1114T4

http://cplusoj.com/d/senior/p/SS231114D 重新梳理一下题目 我们先建图 x → y x\to y x→y&#xff0c;然后对点分类&#xff1a;原串出现点&#xff0c;原串未出现点。 假如我们对一个原串出现点进行了操作&#xff0c;那么它剩余所有出边我们立刻去操作必然没有影响。所…

快速入门安装及使用git与svn的区别常用命令

一、导言 1、什么是svn&#xff1f; SVN是Subversion的简称&#xff0c;是一个集中式版本控制系统。与Git不同&#xff0c;SVN没有分布式的特性。在SVN中&#xff0c;项目的代码仓库位于服务器上&#xff0c;团队成员通过向服务器提交和获取代码来实现版本控制。SVN记录了每个…

数据库实验二

--①查询信息管理系学生的学号和姓名。 --select sno,sname from Student where sdept IS --②查询选修了课程的学生的学号。 --select distinct sc.sno from sc,student --③查询选修了课程号为C001的学生的学号和成绩&#xff0c;并对查询结果按成绩降序排列&#xff0c;如…

专题知识点-二叉树-(非常有意义的一篇文章)

这里写目录标题 二叉树的基础知识知识点一(二叉树性质 )树与二叉树的相互转换二叉树的遍历层次优先遍历树的深度和广度优先遍历中序线索二叉树二叉树相关遍历代码顺序存储和链式存储二叉树的遍历二叉树的相关例题左右两边表达式求值求树的深度找数找第k个数二叉树非递归遍历代码…

蒙特卡洛树搜索(Monte Carlo Tree Search)揭秘

一. 什么是蒙特卡洛树搜索 蒙特卡洛树搜索(MCTS)是一种启发式搜索算法&#xff0c;一般用在棋牌游戏中&#xff0c;如围棋、西洋棋、象棋、黑白棋、德州扑克等。MCTS与人工神经网络结合&#xff0c;可发挥巨大的作用&#xff0c;典型的例子是2016年的AlphaGo&#xff0c;以4:1…

Elasticsearch:ES|QL 快速入门

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新发行版为 Elastic Stack 8.11。 Elasticsearch 查询语言 (ES|QL) 提供了一种强…

gin架构下实现页面的数据调用

package mainimport ("github.com/gin-gonic/gin"_ "net/http""testgin01/myfunc" )func main() {r : gin.Default()//r.LoadHTMLFiles("/temp/hello01.html")r.LoadHTMLGlob("temp/**/*") // **/代表一个文件级//指定cSS文…

快速构建高质量中文APP登录注册页面Figma源文件

在这个数字化时代&#xff0c;移动应用程序&#xff08;APP&#xff09;已经成为我们日常生活中不可或缺的一部分。如果您正在为您的中文APP开发登录注册页面&#xff0c;并寻找高质量的UI设计素材&#xff0c;那么您来对地方了&#xff01;我们为您提供了一个完整的Figma源文件…

工作效率提升工具,帮助企业突破发展瓶颈!

企业发展“瓶颈”意味着企业处于这个阶段时&#xff0c;上不去下不来&#xff0c;出现停滞或者是反复波动的现象&#xff0c;而且持续时间较长&#xff0c;虽然企业苦苦探索变革之道&#xff0c;但是往往事倍功半&#xff0c;反而导致变革成本不断上升。 工作效率提升工具&…

Seatunnel单机和集群部署说明

编译 编译命令 mvn clean package -pl seatunnel-dist -am -Dmaven.test.skiptrue 部署 将seatunnel-dist\target目录下的apache-seatunnel-2.3.3-SNAPSHOT-bin.tar.gz上传至服务器 解压安装包到/opt/soft/seatunnel目录下 配置环境变量 export SEATUNNEL_HOME/opt/soft/s…