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下载

Apache Tomcat® - Welcome!

关于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关联到一块的

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

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

    相关文章

    docker gitlab arm64 版本安装部署

    前言&#xff1a; 使用RK3588 部署gitlab 平台作为个人或小型团队办公代码版本使用 1. docker 安装 sudo apt install docker* 2. 获取arm版本的gitlab GitHub - zengxs/gitlab-arm64: GitLab docker image (CE & EE) for arm64 git clone https://github.com/zengxs…

    LabVIEW在电机自动化生产线中的实时数据采集与生产过程监控

    在电机自动化生产线中&#xff0c;实时数据采集与生产过程监控是确保生产效率和产品质量的重要环节。LabVIEW作为一种强大的图形化编程平台&#xff0c;可以有效实现数据采集、实时监控和自动化控制。详细探讨如何利用LabVIEW实现这一目标&#xff0c;包括硬件选择、软件架构设…

    python算法和数据结构刷题[1]:数组、矩阵、字符串

    一画图二伪代码三写代码 LeetCode必刷100题&#xff1a;一份来自面试官的算法地图&#xff08;题解持续更新中&#xff09;-CSDN博客 算法通关手册&#xff08;LeetCode&#xff09; | 算法通关手册&#xff08;LeetCode&#xff09; (itcharge.cn) 面试经典 150 题 - 学习计…

    【PyTorch】7.自动微分模块:开启神经网络 “进化之门” 的魔法钥匙

    目录 1. 梯度基本计算 2. 控制梯度计算 3. 梯度计算注意 4. 小节 个人主页&#xff1a;Icomi 专栏地址&#xff1a;PyTorch入门 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活…

    C++基础day1

    前言&#xff1a;谢谢阿秀&#xff0c;指路阿秀的学习笔记 一、基础语法 1.构造和析构: 类的构造函数是一种特殊的函数&#xff0c;在创建一个新的对象时调用。类的析构函数也是一种特殊的函数&#xff0c;在删除所创建的对象时调用。 构造顺序&#xff1a;父类->子类 析…

    深入理解linux中的文件(上)

    1.前置知识&#xff1a; &#xff08;1&#xff09;文章 内容 属性 &#xff08;2&#xff09;访问文件之前&#xff0c;都必须打开它&#xff08;打开文件&#xff0c;等价于把文件加载到内存中&#xff09; 如果不打开文件&#xff0c;文件就在磁盘中 &#xff08;3&am…

    Spring Boot Web项目全解析:从前端请求到后端处理

    第一章&#xff1a;对静态资源的整合 ConfigurationProperties(prefix"spring.resources", ignoreUnknownFieldsfalse)public class ResourceProperties implements ResourceLoaderAware {//可以设置和静态资源有关的参数&#xff0c;缓存时间等WebMvcAuotConfigura…

    Java创建对象有几种方式?

    大家好&#xff0c;我是锋哥。今天分享关于【Java创建对象有几种方式?】面试题。希望对大家有帮助&#xff1b; Java创建对象有几种方式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Java 中&#xff0c;创建对象有几种常见的方式&#xff0c;具体如下&…

    基于Spring Security 6的OAuth2 系列之八 - 授权服务器--Spring Authrization Server的基本原理

    之所以想写这一系列&#xff0c;是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器&#xff0c;但当时基于spring-boot 2.3.x&#xff0c;其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0&#xff0c;结果一看Spring Security也升级…

    深入浅出并查集(不相交集合实现思路)

    引言 并查集&#xff08;Disjoint Set Union&#xff0c;简称DSU&#xff09;是一种用于处理一些不交集的合并及查询问题。它主要支持两种操作&#xff1a;查找&#xff08;Find&#xff09;和合并&#xff08;Union&#xff09;。 查找&#xff1a;确定某个元素属于哪一个子…

    如何运行Composer安装PHP包 安装JWT库

    1. 使用Composer Composer是PHP的依赖管理工具&#xff0c;它允许你轻松地安装和管理PHP包。对于JWT&#xff0c;你可以使用firebase/php-jwt这个库&#xff0c;这是由Firebase提供的官方库。 安装Composer&#xff08;如果你还没有安装的话&#xff09;&#xff1a; 访问Co…

    享元模式——C++实现

    目录 1. 享元模式简介 2. 代码示例 1. 享元模式简介 享元模式是一种结构型模式。 享元模式用于缓存共享对象&#xff0c;降低内存消耗。共享对象相同的部分&#xff0c;避免创建大量相同的对象&#xff0c;减少内存占用。 享元模式需要将对象分成内部状态和外部状态两个部分…

    网络原理(4)—— 网络层详解

    目录 一. IP协议报头结构 二. 地址管理 2.1 路由器 2.1.1 路由选择 2.1.2 WAN口&#xff08;Wide Area Network&#xff09; 2.1.3 LAN口&#xff08;Local Area Network&#xff09; 2.1.4 WLAN口&#xff08;Wireless Local Area Network&#xff09; 2.2 网段划分…

    基于深度学习的输电线路缺陷检测算法研究(论文+源码)

    输电线路关键部件的缺陷检测对于电网安全运行至关重要&#xff0c;传统方法存在效率低、准确性不高等问题。本研究探讨了利用深度学习技术进行输电线路关键组件的缺陷检测&#xff0c;目的是提升检测的效率与准确度。选用了YOLOv8模型作为基础&#xff0c;并通过加入CA注意力机…

    Android --- handler详解

    handler 理解 handler 是一套Android 消息传递机制&#xff0c;主要用于线程间通信。 tips&#xff1a; binder/socket 用于进程间通信。 参考&#xff1a; Android 进程间通信-CSDN博客 handler 就是主线程在起了一个子线程&#xff0c;子线程运行并生成message &#xff0c;l…

    vim如何解决‘’文件非法关闭后,遗留交换文件‘’的问题

    过程描述&#xff1a; 由于我修改文件时&#xff08;一定得修改了文件&#xff0c;不做任何修改不会产生这个问题&#xff09;的非法关闭&#xff0c;比如直接关闭虚拟机&#xff0c;或者直接断开远程工具的远程连接&#xff0c;产生了以下遗留交换文件的问题&#xff1a; 点击…

    六十分之三十七——一转眼、时光飞逝

    一、目标 明确可落地&#xff0c;对于自身执行完成需要一定的努力才可以完成的 1.第三版分组、激励、立体化权限、智能设备、AIPPT做课 2.8本书 3.得到&#xff1a;头条、吴军来信2、卓克科技参考3 4.总结思考 二、计划 科学规律的&#xff0c;要结合番茄工作法、快速阅读、…

    Linux环境下的Java项目部署技巧:安装 Mysql

    查看 myslq 是否安装&#xff1a; rpm -qa|grep mysql 如果已经安装&#xff0c;可执行命令来删除软件包&#xff1a; rpm -e --nodeps 包名 下载 repo 源&#xff1a; http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm 执行命令安装 rpm 源(根据下载的…

    css三角图标

    案例三角&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…

    Shadow DOM举例

    这东西具有隔离效果&#xff0c;对于一些插件需要append一些div倒是不错的选择 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"utf-8"> <title>演示例子</title> </head> <body> <style&g…