【仿写框架之仿写Tomact】一、Tomcat的工作流程

news2025/1/12 20:46:00

文章目录

  • 1、启动阶段
  • 2、监听阶段:
  • 3、请求处理阶段:
  • 4、发送请求处理后的响应

当涉及到Java Web应用程序的部署和运行,Apache Tomcat无疑是一个备受欢迎的选择。Tomcat作为一个开源的、轻量级的Java Servlet容器和JavaServer Pages (JSP) 容器,扮演着连接用户和应用程序的重要角色。本篇文将向大家阐述Tomcat的执行流程,从启动到请求处理再到关闭,帮助您更好地理解Tomcat在Java Web开发中的作用。

1、启动阶段

在启动阶段,他会扫描webapp目录下的所有子目录和子文件,然后把这个目录下的 .class 文件挑选出来,拿到每个java类的类路径(全限定名),然后for循环遍历这些类路径,通过反射,得到相应的类对象,然后从Class类信息里去获取注解信息,拿到注解信息之后看哪些java的类信息里面有@WebServlet注解,把这些java文件挑选出来。通过newInstance() 生成类的实例,它代替了new操作,为什么这些环节没办法使用直接new的方式而是要用newInstance() 呢,使用 new 的前提是要知道类的名字和它的包路径,很可惜tomcat的开发者事先不知道使用者创建的 servlet 叫什么名字以及所在包是什么,所以 new是不能使用的,才有了newInstance() 的方式生成实例。 生成servlet实例的时候,又进一步通过方法的实例拿到了它里面的 method实例,method实例里面挑选出 doGet 和 doPost实例,同时上面也拿到了注解里的路径值,然后把它们放到了 hashMap 中,其中 key值就是注解里的路径,value值就是对象实例信息。除了method实例,servlet实例也存在hashMap中,method实例和servlet实例对应的key值都是注解的路径。

2、监听阶段:

  • Tomcat根据配置的Connector信息创建并启动监听网络连接的组件,如HTTP Connector。
    Tomcat进入等待状态,开始监听来自客户端的HTTP请求。

3、请求处理阶段:

当有HTTP请求到达时并不是立即开启线程处理的,而是把它放入线程池中。每个线程在工作时,首先把通过端口传过来的 http字符信息封装成 httpRequest 对象和 httpResponce对象,同时提取出请求的 URL ,把URL中的 ip、端口、项目名字去掉剩下的就是要请求的servlet地址或前端地址。如果请求的是前端资源那么会根据请求路径去相应的目录下找前端文件,之后按照相应的编码读取里面的字符串返回给前端;如果请求的是servlet 那么会根据URL去之前启动阶段的 hashMap里匹配Class对象,提取出来之后执行代理。tomcat通过invoke()方法完成了 servlet的调用。

4、发送请求处理后的响应

在业务逻辑处理完成后,Servlet或JSP生成HTTP响应,包括状态码、响应头和响应体。这些内容被封装在HTTP响应对象中,返回给客户端。

在这里插入图片描述

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

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

相关文章

搭建UTMFW

UTMFW 是运行在 OpenBSD 上的 UTM 防火墙 github地址:https://github.com/sonertari/UTMFW 下载镜像: 按操作步骤搭建(基本没有差别): Welcome to the OpenBSD/arm64 6.9 installation program. (I)nstall or (S)hell…

使用 PyTorch 进行高效图像分割:第 3 部分

一、说明 在这个由 4 部分组成的系列中,我们将使用 PyTorch 中的深度学习技术从头开始逐步实现图像分割。本部分将重点介绍如何使用深度可分离卷积来优化我们的 CNN 基线模型,以减少可训练参数的数量,使模型可部署在移动设备和其他边缘设备上…

阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)推送镜像全过程及总结

前提:安装配置好docker,可参考我这篇 基于CentOS7安装配置docker与docker-compose。 一、设置访问凭证 1.1 容器镜像服务ACR 登录进入阿里云首页,点击 产品-容器-容器镜像服务ACR 点击管理控制台 1.2 进入控制台-点击实例列表 个人容器…

numpy与matplotlib 常用日常代码

matplotlab 和 numpy 可能是python 数据处理工作中用的最多的库了, 官网的文档十分详细,但是就是因为数量庞大,很多时候常用的功能和生僻冷门的功能混在一起,找不到重点。按照二八原则,掌握20%的功能就已经能应付绝大多…

无法打开程序因为msvcp140.dll丢失,msvcp140.dll丢失的解决方法

前几天看到有小伙伴再问什么是msvcp140.dll文件,相信很多人都不知道这是什么吧,如果电脑msvcp140.dll文件丢失的话会怎么样呢?丢失了应该如何找回呢?其实这些都是一些比较常见的电脑知识,我们是需要去了解一下的&#…

Spring Framework中的Bean生命周期

目录 一.Bean生命周期的简介 1.基本概念 2.Spring生命周期的几大阶段 3.注意点及小结 4.生活案例 5.Spring容器管理JavaBean的初始化过程 二. Bean的单例选择与多例选择 1.单例选择与多例选择的优缺点 1.1单例模式的优点: 1.2单例模式的缺点: 1…

HC32L110的串口不定长接收及PCA和IRQ的部分问题

show you the code: https://gitee.com/yangfei_addoil/hc32-l110-b6-test 另:程序中使用帕斯卡命名法的是从官方例程上复制的;使用下划线命名法的是博主的; 串口不定长接收 注意串口要自己绑定/指定到一个定时器上&#xff1b…

【仿写tomcat】一、tomcat工作流程

仿写tomcat 简介tomcat简介流程分析tomcat是怎么和访问者交互的?流程图 简介 作者前不久刚仿写了一个简易的tomcat,在此分享给各位,此篇为对tomcat的简介和流程分析,具体仿写内容后续会贴在这里 扫描java文件,获取带…

基于IMX6ULLmini的Linux裸机开发系列六:中断向量表

ARMv7-A 一级查表 等中断真正发生的时候,自动跳转指定位置(基址偏移) 习惯放在代码的起始地方,复位中断放在代码的零地址,被定义的指定中断放在代码的第四个字节的位置 addrTYPEFUNCTIONMODE0x00Reset复位中断SVC0x04Undefined instructi…

Vue-13.创建完整的Vue项目(vue+vue-cli+js)

前言 之前写了命令创建Vue项目,但是事实上我们可以直接用编译器直接创建项目,这里我使用webstorm(因为我是前后端兼修的所以我习惯使用Idea家族的编译器) 只写前端的推荐用VsCode前后端都写的推荐用webstorm 新建项目 项目初始…

31.Netty源码之客户端启动流程

highlight: arduino-light 客户端启动主要流程 如果看了服务器端的启动流程,这里简单看下就可以了。 java package io.netty.server; ​ import io.netty.bootstrap.Bootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import …

酒店要如何应对旅游旺季?报修工单管理系统哪家好?

酒店在高峰旅游时期是其最为繁忙的阶段,这时要处理的报修事项比较多,因此应对措施变得尤为重要。填补酒店房间、应对设备故障等情况,造成了来宾数量和压力的急增,因此需要考虑并采用更加有效的安全保障和服务措施,以确…

传输层协议——TCP(上)

文章目录 1. TCP协议1.1 TCP协议段格式1.2 确认应答(ACK)机制1.3 16位窗口大小1.4 6位标志位1.4.1 TCP三次握手 1.5 确认应答(ACK)机制1.6 超时重传机制1.7 连接管理机制1.7.1 理解TIME_WAIT状态1.7.2 理解 CLOSE_WAIT 状态 1. TCP协议 TCP全称为传输控制协议,意思…

Unity 找不到 Navigation 组件的解决

当我们想利用unity 里面的Navigation 组件来实现我们的物体的自动导航时,有时竟然会发现我们的菜单栏里面找不到 该组件 这时我们应该怎么办? 请确保你的项目中已经导入了Unity的AI模块。要导入该模块,请打开"Project Settings"&am…

论文学习——PixelSNAIL:An Improved Autoregressive Geenrative Model

文章目录 引言论文翻译Abstract问题 Introduction第一部分问题 第二部分问题 Model Architecture网络结构第一部分问题第二部分问题 Experiments实验问题 Conclusion结论问题 总结参考 引言 这篇文章,是《PixelSNAIL:An Improved Autoregressive Geenrative Model》…

在自定义数据集上使用 Detectron2 和 PyTorch 进行人脸检测

本文讲讲述如何使用Python在自定义人脸检测数据集上微调预训练的目标检测模型。学习如何为Detectron2和PyTorch准备自定义人脸检测数据集,微调预训练模型以在图像中找到人脸边界。 人脸检测是在图像中找到(边界的)人脸的任务。这在以下情况下…

STM32F40X系列FSMC8路驱动LCD显示屏(LY-TFT30-39P-1509 芯片hx8352)

hx8352_8080_8bit_FMSC板级驱动 1.LCD相关1.1LCD参数1.2 LCD引脚1.3 LCD实物1.4 LCD引脚解释 2.接线关系3.STM32F40x基于FMSC16bit修改1)地址偏移2)删除多余GPIO3)修改FMSC的配置4)LCD初始化寄存器 3.板驱动程序4.运行结果 1.LCD相关 1.1LCD参数 LCD控制芯片&…

C数据结构与算法——无向图(最小生成树) 应用

实验任务 (1) 掌握Kruskal最小生成树算法; (2) 掌握Prim最小生成树算法。 实验内容 (1) 随机生成一个无向网 G ( V, E ),V { A, B, C, D, E, F },| E | 11,边的权值取值范围为 [ 1, 40 ]; (2) 使用Prim算法求出图…

离散化思想——只处理有效数据的优化思想

离散化思想——只处理有效数据的优化思想 什么是离散化离散化题目——校门外的树(超强版,1e9)题目描述输入格式输出格式样例样例输入样例输出 提示 思路分析朴素做法离散化!!代码分析数组循环 什么是离散化 离散化思想…

C语言之浮点数_数据存储篇(2)

目录 浮点数 什么是浮点数呢? 为什么叫浮点数? 浮点数家族 浮点数表示的范围? 浮点数存储的例子 浮点数的存储方式 写成规定形式是怎样的? 那SME在内存中如何分配的呢? 为什么要这样存储? 浮点…