当前位置: 首页 > news >正文

tomcat核心组件及原理概述

目录

1. tomcat概述

1.1 概念

1.2 官网地址

2. 基本使用

2.1下载

3. 整体架构

3.1 核心组件

3.2 从web.xml配置和模块对应角度

3.3 如何处理请求

4. 配置JVM参数

5. 附录


1. tomcat概述

1.1 概念

什么是tomcat

Tomcat是一个开源、免费、轻量级的Web服务器。

        Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。

什么是Web服务器

Web服务器是安装在服务端的一款软件,它对HTTP协议的操作进行了封装使得程序员不必直接对协议进行相关操作,让Web开发变得更加便捷。Web服务器的主要功能就是提供网上信息浏览服务,当我们将自己写的Web项目部署道Web服务器上,只要启动Web服务器,就能直接通过浏览器访问我们的Web项目了。

目前比较有名的Web服务器有:Apache、Nginx、ISS。

拓展

  • Tomcat和Apache的联系:Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行
  • Tomcat仅支持JDBC、JSP、Servlet等少量JavaEE规范1
  • 因为Tomcat支持Servlet/JSP规范,所以Tomcat也被称为Web容器、Servlet容器。Servlet需要依赖Tomcat才能运行。
  • Web服务器、服务端、服务器的区别和联系
    • 服务器是一种特殊的计算机,它比普通计算机运行更快、负载更高、价格更贵,属于硬件范畴;
    • 服务端是是指为客户端提供服务的计算机,服务的内容诸如:提供数据的保存、数据的访问……属于硬件范畴;
    • Web服务器是指安装再服务端的一款软件,主要功能是提供网上信息浏览服务,但是只能响应HTTP的请求数据,属于软件范畴。
  • 能让你写的网站被所有人访问的三要素:服务器+域名+网站

1.2 官网地址

Apache Tomcat® - Welcome!

文件目录

目录文件说明
bin/可执行文件目录
startup.bat ,
startup.sh

存放Tomcat的启动、停止等批处理脚本文件

启动:

startup.bat

./startup.sh

shutdown.bat ,
shutdown.sh

用于在windows和linux下的停止脚本

终止:

shutdown.bat

./shutdown.sh

conf/

用于存放Tomcat的相关配置文件

Catalina

用于存储针对每个虚拟机的Context配置

context.xml

用于定义所有web应用均需加载的Context配 置,如果web应用指定了自己的context.xml ,该文件将被覆盖

catalina.properties

Tomcat 的环境变量配置

catalina.policy

Tomcat 运行的安全策略配置

logging.properties

Tomcat 的日志配置文件, 可以通过该文件修 改Tomcat 的日志级别及日志路径等

server.xml

Tomcat 服务器的核心配置文件

tomcat-users.xml

定义Tomcat默认的用户及角色映射信息配置

web.xml

Tomcat 中所有应用默认的部署描述文件, 主 要定义了基础Servlet和MIME映射。

lib

/

Tomcat 服务器的依赖包

logs

/

Tomcat 默认的日志存放目录

webapps

/

Tomcat 默认的Web应用部署目录

work

/

Web 应用JSP代码生成和编译的临时

2. 基本使用

2.1下载

关于zip、tar.gz详解

tomcat下载以及各个版本(zip,tar.gz,32-bit Windows zip,64-bit Windows zip,32-bit/64-bit Windows Service Instal_tomcat的tar.gz与zip-CSDN博客

3. 整体架构

 

3.1 核心组件

Catalina的各个组件的作用如下:

  • Server: 表示服务器,它提供了一种优雅的方式来启动和停止整个系统,不必单独启停连接器和容器;它是Tomcat构成的顶级构成元素,所有一切均包含在Server中;

  • Service: 表示服务,Server可以运行多个服务。比如一个Tomcat里面可运行订单服务、支付服务、用户服务等等;Server的实现类StandardServer可以包含一个到多个Services, Service的实现类为StandardService调用了容器(Container)接口,其实是调用了Servlet Engine(引擎),而且StandardService类中也指明了该Service归属的Server;

    • Connector: 表示连接器, 它将Service和Container连接起来,首先它需要注册到一个Service,它的作用就是把来自客户端的请求转发到Container(容器),这就是它为什么称作连接器, 它支持的协议如下:

      • 支持AJP协议
      • 支持Http协议
      • 支持Https协议
    • Service内部还有各种支撑组件,下面简单罗列一下这些组件

      • Manager -- 管理器,用于管理会话Session
      • Logger -- 日志器,用于管理日志
      • Loader -- 加载器,和类加载有关,只会开放给Context所使用
      • Pipeline -- 管道组件,配合Valve实现过滤器功能
      • Valve -- 阀门组件,配合Pipeline实现过滤器功能
      • Realm -- 认证授权组件
    • Container: 表示容器,可以看做Servlet容器;引擎(Engine)、主机(Host)、上下文(Context)和Wraper均继承自Container接口,所以它们都是容器。

      • Engine -- 表示整个Catalina的Servlet引擎,用来管理多个虚拟站点,一个Service最多只能有一个Engine,但是一个引擎可包含多个Host。
      • Host -- 代表一个虚拟主机或者说一个站点,可以给Tomcat配置多个虚拟主机地址,而一个虚拟主机下可包含多个Context。
      • Context -- 表示一个Web应用程序, 一个Web应用可包含多个Wrapper。
      • Wrapper -- 表示一个Servlet,Wrapper 作为容器中的最底层,不能包含子容器。

    3.2 从web.xml配置和模块对应角度

    <?xml version="1.0" encoding="UTF-8"?><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="org.apache.catalina.UserDatabase"description="User database that can be updated and saved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /></Host></Engine></Service>
    </Server>

    3.3 如何处理请求

    启动流程

    启动流程主要分为两块内容:

    1)初始化:解析Server.xml文件,生成Server等实例,并对Connector和Container等进行初始化操作。

    2)启动:调用start()方法启动Connector和Container等。其中Container部分,context启动的时候会解析web.xml,并触发contextConfig这个监听器,从而创建wrapper容器,初始化Servlet实例,如果该Servlet标识了loadOnStartup那么在start()过程中将会调用其init()方法进行Servlet初始化。

    从tomcat的启动流程图,我们可以看到它和我们日常编写webapp应用接入点就在于创建Servlet的容器,所以我们的业务代码就是基于Servlet编写,使用tomcat则无需关心Servlet如何对外提供服务,简化了开发流程。

    通过一个完整的HTTP请求,我们还需要把它贯穿起来

    假设来自客户的请求为:http://localhost:8080/test/index.jsp 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector,然后

    • Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应
    • Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host
    • Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
    • localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
    • Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
    • path="/test"的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
    • Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类,构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
    • Context把执行完了之后的HttpServletResponse对象返回给Host
    • Host把HttpServletResponse对象返回给Engine
    • Engine把HttpServletResponse对象返回给Connector
    • Connector把HttpServletResponse对象返回给客户browser

    处理请求流程

    4. 配置JVM参数

    方法一  直接修改catalina文件

    # 打开 catalina.sh 文件
    vim $CATALINA_HOME/bin/catalina.sh

    # 找到或添加 JAVA_OPTS 变量设置
    # 在 cygwin=false 之前添加以下内容


    JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx1024m -XX:+UseG1GC"

    # 保存并关闭文件
    # 重启 Tomcat
    $CATALINA_HOME/bin/shutdown.sh
    $CATALINA_HOME/bin/startup.sh

    方法二  使用CATALINA_OPTS环境变量

    在Tomcat的启动脚本中,你可以通过设置CATALINA_OPTS环境变量来添加JVM参数。

    对于Linux/Unix:

    1. 使用CATALINA_OPTS环境变量
    在Tomcat的启动脚本中,可以通过设置CATALINA_OPTS环境变量来添加JVM参数。
    找到Tomcat安装目录下的bin目录。

    打开setenv.sh文件(如果不存在,可以自己创建一个)

    在文件中添加或修改CATALINA_OPTS变量,例如:

    export CATALINA_OPTS="-Xms512M -Xmx1024M -XX:MaxPermSize=256m"

    保存文件并重新启动Tomcat。

    对于Windows:

    找到Tomcat安装目录下的bin目录。

    打开setenv.bat文件(如果不存在,你可以自己创建一个)。

    在文件中添加或修改CATALINA_OPTS变量,例如:

    set CATALINA_OPTS=-Xms512M -Xmx1024M -XX:MaxPermSize=256m

    保存文件并重新启动Tomcat。

    5. 附录

    Spring MVC是如何和Tomcat关联到一块的

    相关文章:

    tomcat核心组件及原理概述

    目录 1. tomcat概述 1.1 概念 1.2 官网地址 2. 基本使用 2.1下载 3. 整体架构 3.1 核心组件 3.2 从web.xml配置和模块对应角度 3.3 如何处理请求 4. 配置JVM参数 5. 附录 1. tomcat概述 1.1 概念 什么是tomcat Tomcat是一个开源、免费、轻量级的Web服务器。 Tomca…...

    本地部署DeepSeek教程(Mac版本)

    第一步、下载 Ollama 官网地址&#xff1a;Ollama 点击 Download 下载 我这里是 macOS 环境 以 macOS 环境为主 下载完成后是一个压缩包&#xff0c;双击解压之后移到应用程序&#xff1a; 打开后会提示你到命令行中运行一下命令&#xff0c;附上截图&#xff1a; 若遇…...

    MyBatis-Plus笔记-快速入门

    大家在日常开发中应该能发现&#xff0c;单表的CRUD功能代码重复度很高&#xff0c;也没有什么难度。而这部分代码量往往比较大&#xff0c;开发起来比较费时。 因此&#xff0c;目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…...

    爬取豆瓣书籍数据

    # 1. 导入库包 import requests from lxml import etree from time import sleep import os import pandas as pd import reBOOKS [] IMGURLS []# 2. 获取网页源代码 def get_html(url):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36…...

    基于微信小程序的电子商城购物系统设计与实现(LW+源码+讲解)

    专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

    6-图像金字塔与轮廓检测

    文章目录 6.图像金字塔与轮廓检测(1)图像金字塔定义(2)金字塔制作方法(3)轮廓检测方法(4)轮廓特征与近似(5)模板匹配方法6.图像金字塔与轮廓检测 (1)图像金字塔定义 高斯金字塔拉普拉斯金字塔 高斯金字塔:向下采样方法(缩小) 高斯金字塔:向上采样方法(放大)…...

    【Ai】DeepSeek本地部署+Page Assist图形界面

    准备工作 1、ollama&#xff0c;用于部署各种开源模型&#xff0c;并开放接口的程序 https://ollama.com/download 2、deepseek-r1:32b 模型 https://ollama.com/library/deepseek-r1:32b 不同的模型版本对计算机性能的要求不一样&#xff0c;版本越高对显卡和内存的要求越高…...

    【最长不下降子序列——树状数组、线段树、LIS】

    题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int a[N], b[N], tr[N];//a保存权值&#xff0c;b保存索引,tr保存f&#xff0c;g前缀属性最大值 int f[N], g[N]; int n, m; bool cmp(int x, int y) {if(a[x] ! a[y]) return a[x] < a[…...

    【实战篇章】深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据

    文章目录 深入探讨&#xff1a;服务器如何响应前端请求及后端如何查看前端提交的数据一、服务器如何响应前端请求HTTP 请求生命周期全解析1.前端发起 HTTP 请求&#xff08;关键细节强化版&#xff09;2. 服务器接收请求&#xff08;深度优化版&#xff09; 二、后端如何查看前…...

    Games104——引擎工具链基础

    总览 工具链 用户到引擎架构图 工具链是衔接不同岗位、软件之间的桥梁&#xff0c;比如美术与技术&#xff0c;策划与美术&#xff0c;美术软件与引擎本身等&#xff0c;有Animation、UI、Mesh、Shader、Logical 、Level Editor等等。一般商业级引擎里的工具链代码量是超过…...

    分层多维度应急管理系统的设计

    一、系统总体架构设计 1. 六层体系架构 #mermaid-svg-QOXtM1MnbrwUopPb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QOXtM1MnbrwUopPb .error-icon{fill:#552222;}#mermaid-svg-QOXtM1MnbrwUopPb .error-text{f…...

    【漏斗图】——1

    🌟 解锁数据可视化的魔法钥匙 —— pyecharts实战指南 🌟 在这个数据为王的时代,每一次点击、每一次交易、每一份报告背后都隐藏着无尽的故事与洞察。但你是否曾苦恼于如何将这些冰冷的数据转化为直观、吸引人的视觉盛宴? 🔥 欢迎来到《pyecharts图形绘制大师班》 �…...

    (二)QT——按钮小程序

    目录 前言 按钮小程序 1、步骤 2、代码示例 3、多个按钮 ①信号与槽的一对一 ②多对一&#xff08;多个信号连接到同一个槽&#xff09; ③一对多&#xff08;一个信号连接到多个槽&#xff09; 结论 前言 按钮小程序 Qt 按钮程序通常包含 三个核心文件&#xff1a; m…...

    【Linux】从硬件到软件了解进程

    个人主页~ 从硬件到软件了解进程 一、冯诺依曼体系结构二、操作系统三、操作系统进程管理1、概念2、PCB和task_struct3、查看进程4、通过系统调用fork创建进程&#xff08;1&#xff09;简述&#xff08;2&#xff09;系统调用生成子进程的过程〇提出问题①fork函数②父子进程关…...

    HTB:Alert[WriteUP]

    目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用ffuf对alert.htb域名进行子域名FUZZ 使用go…...

    ARM嵌入式学习--第十天(UART)

    --UART介绍 UART(Universal Asynchonous Receiver and Transmitter)通用异步接收器&#xff0c;是一种通用串行数据总线&#xff0c;用于异步通信。该总线双向通信&#xff0c;可以实现全双工传输和接收。在嵌入式设计中&#xff0c;UART用来与PC进行通信&#xff0c;包括与监控…...

    玉米苗和杂草识别分割数据集labelme格式1997张3类别

    数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;1997 标注数量(json文件个数)&#xff1a;1997 标注类别数&#xff1a;3 标注类别名称:["corn","weed","Bean…...

    哈夫曼树

    哈夫曼树&#xff08;Huffman Tree&#xff09;是一种最优的二叉树&#xff0c;常用于数据压缩&#xff0c;如在 Huffman 编码中使用。它是根据字符出现的频率来构造的&#xff0c;频率越高的字符越靠近树的根&#xff0c;频率低的字符则在较深的节点上。其核心思想是通过构建一…...

    wax到底是什么意思

    在很久很久以前&#xff0c;人类还没有诞生文字之前&#xff0c;人类就产生了语言&#xff1b;在诞生文字之前&#xff0c;人类就已经使用了语言很久很久。 没有文字之前&#xff0c;人们的语言其实是相对比较简单的&#xff0c;因为人类的生产和生活水平非常低下&#xff0c;…...

    笔记:使用ST-LINK烧录STM32程序怎么样最方便?

    一般板子在插件上&#xff0c; 8脚 3.3V;9脚 CLK;10脚 DIO;4脚GND ST_Link 19脚 3.3V;9脚 CLK;7脚 DIO;20脚 GND 烧录软件&#xff1a;ST-LINK Utility&#xff0c;Keil_5; ST_Link 接口针脚定义&#xff1a; 按定义连接ST_Link与电路板&#xff1b; 打开STM32 ST-LINK Uti…...

    wordpress后台更新后 前端没变化的解决方法

    使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

    云计算——弹性云计算器(ECS)

    弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

    DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

    目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

    【解密LSTM、GRU如何解决传统RNN梯度消失问题】

    解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

    蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

    前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

    STM32标准库-DMA直接存储器存取

    文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

    如何在看板中有效管理突发紧急任务

    在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

    python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

    更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

    CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

    目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

    SpringTask-03.入门案例

    一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...