首页 > 其他分享 >Tomcat

Tomcat

时间:2024-08-17 18:05:17浏览次数:4  
标签:容器 Tomcat Service Connector 连接器 组件

Tomcat基础

Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,实现了对Servlet和JavaServer Page(JSP)的支持。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。

Tomcat能够通过Connector组件接收并解析HTTP请求,然后将一个ServletRequest对象发送给Container处理。容器处理完之后会将响应封装成ServletRespone返回给Connector,然后Connector再将ServletRespone解析为HTTP响应文本格式发送给客户端,至此Tomcat就完成了一次网络通信。

架构

Tomcat Server大致可以分为三个组件,Service、Connector、Container。

Server

Tomcat Server可以包含多个Service,比如Tomcat默认的Service服务Catalina。每一个Service都是独立的,他们共享一个JVM以及系统类库。这些 Service 可以提供不同的功能,如 AJP Connector、JMX 管理等。

Connector 连接器

Connector用于连接Service和Container,解析客户端的请求并转发到Container,以及转发来自Container的响应。每一种不同的Connector都可以处理不同的请求协议,包括HTTP/1.1、HTTP/2、AJP等等。

Container 容器

Tomcat设计了四种容器,分别是Engine、Host、Context和Wrapper,其关系如下

一个Container对应一个Engine,一个Engine可以包含多个Host,一个Host可以包含多个Context,Context又包含多个Wrapper。

此时,设想这样一个场景:我们此时要访问https://manage.xxx.com:8080/user/list,那tomcat是如何实现请求定位到具体的servlet的呢?为此tomcat设计了Mapper,其中保存了容器组件与访问路径的映射关(注解同理)。

然后就开始四步走:

  • 根据协议和端口号选定Service和Engine。

我们知道Tomcat的每个连接器都监听不同的端口,比如Tomcat默认的HTTP连接器监听8080端口、默认的AJP连接器监听8009端口。上面例子中的URL访问的是8080端口,因此这个请求会被HTTP连接器接收,而一个连接器是属于一个Service组件的,这样Service组件就确定了。我们还知道一个Service组件里除了有多个连接器,还有一个容器组件,具体来说就是一个Engine容器,因此Service确定了也就意味着Engine也确定了。

  • 根据域名选定Host。

Service和Engine确定后,Mapper组件通过url中的域名去查找相应的Host容器,比如例子中的url访问的域名是manage.xxx.com,因此Mapper会找到Host1这个容器。

  • 根据url路径找到Context组件。

Host确定以后,Mapper根据url的路径来匹配相应的Web应用的路径,比如例子中访问的是/user,因此找到了Context1这个Context容器。

  • 根据url路径找到Wrapper(Servlet)。

Context确定后,Mapper再根据web.xml中配置的Servlet映射路径来找到具体的Wrapper和Servlet,例如这里的Wrapper1的/list。

参考文章

https://github.com/W01fh4cker/LearnJavaMemshellFromZero

标签:容器,Tomcat,Service,Connector,连接器,组件
From: https://www.cnblogs.com/Ho1dF0rward/p/18364758

相关文章

  • SpringBoot中通过8项配置优化提升Tomcat性能
    ❃博主首页:「码到三十五」,同名公众号:「码到三十五」,wx号:「liwu0213」☠博主专栏:<mysql高手><elasticsearch高手><源码解读><java核心><面试攻关>♝博主的话:搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,......
  • SpringBoot修改内置tomcat版本的操作步骤
    一:由于Tomcat高危漏洞影响,本文介绍了如何查询和修改Springboot内嵌的Tomcat版本,包括通过POM文件或mvnrepository查询版本,以及通过添加properties配置更改版本。此外,还提到了遇到缺少tomcat-juli依赖时的解决办法。最近Tomcat爆出高危漏洞,基本影响所有的Tomcat版本,故需要对sprin......
  • Linux Web项目部署过程命令 Tomcat组件
    LinuxWeb项目部署过程命令Tomcat,本文涉及的是打成jar包方式的前后端分离项目,打成war包的方式也有解释介绍。1.连接服务器2.利用lsof命令查看web后端部署端口进程,然后kill杀死进程,                            ......
  • 简单的spring boot tomcat版本升级
    简单的springboottomcat版本升级1.需求我们使用的springboot版本为2.3.8.RELEASE,对应的tomcat版本为9.0.41,公司tomcat对应版本发现攻击者可发送不完整的POST请求触发错误响应,从而可能导致获取其他用户先前请求的数据,造成信息泄露的bug,行方要求对tomcat版本进行升级,受......
  • CentOS7系统安装Tomcat
    系统:Windows11家庭中文版应用:VMwareWorkstationPro  FinalShell4.3.10使用包:apache-tomcat-8.5.53.tar.gz目录:1.安装Tomcat     2.修改端口号     3.如何使用浏览器访问tomcat        4.配置Tomcat服务安装        前提......
  • 一、Tomcat基础知识与运行原理
    本章节为介绍如何安装Tomcat工具以及其主要架构知识概念,深入浅出让新人玩家理解为什么选择该容器以及该容器的优点web服务器概念服务器:安装了服务器软件的计算机服务器软件:接收用户的请求,处理请求,做出响应web服务器软件:接收用户的请求,处理请求,做出响应。在web服务器软件......
  • Tomcat的优化
    安全优化Tomcatshutdown端口保护;改成其他特殊端口,暗号也需要修改禁用管理端,把管理端相关的配置文件,目录清理,例如备份conf目录下面的server.yaml并进行按需配置降权启动(监牢模式)jeepinjail通过普通用户运行与管理服务Tomcat版本信息隐藏访问限制访问日志的规范设置启动......
  • Tomcat升级
    一、为什么Tomcat需要升级在生产环境中,我们都会指定对应的Tomcat版本进行安排配置,但是由于Tomcat厂商对于小版本的更新迭代会将一些Bug修复,这个时候在生产中出现问题/预防出现问题,可以通过小版本的升级解决前提:这里我们以9.0.83为例;所以在此之前你的Tomcat版本是低于此版本,如果......
  • 使用orcale数据库的springboot项目打war包部署到tomcat后启动报错解决办法(缺少UCP数据
    我将在我本丢运行ok的springboot项目打成war包后部署到tomcat后,启动tomcat的时候一直显示:由于之前的错误,Context[/ruoyi]启动失败......,查看tomcat的日志文件发现报错:12-Aug-202410:20:35.183严重[main]org.apache.catalina.core.StandardContext.listenerStart配置应用......
  • Tomcat
    在上一篇了解完网络通信德基本概念之后,本章节为了解Tomcat的基本逻辑方便以后对UDP:(发短信)发送端://不需要连接服务器publicstaticvoidmain(string[]args)throwsException{//1.建立一个socketDatagramSocketsocket=newDatagramsocket();//2.建个包Stringmsg="......