谈谈TOMCAT原理和机制

article/2025/9/14 0:37:20

        从服务器说起,一台装了操作系统(linux、unix、win等等)的物理机或者虚拟机不能称之为真正的服务器,因为服务器是能对外界提供服务的计算机,要能成为服务器必须借助其他软件的支持比如:tocmat、apache、IIS、nginx、jetty等等,借助与这些软件才能实现计算机具有服务的功能,下面我们谈谈web的开发中常用的服务器Tomcat。

       一.从server.xml说起

        从配置文件中我们可以看出:

        1.一个tomcat只有一个server(主要提供整个与tomcat运行相关的环境)

        2.一个server可配置多个Listener(相当于异步监听事件)

        3.一个server配置一个GlobalNamingResources(JNDI映射,没用过,下面可以配多个resourse),统一的映射管理,避免每个servlet都需要配置,说实话,没用过不知道干啥用。

        4.一个server配置多个service,虽然给的样例中是一个,但事实上可以配置多个,比如我们需要在一个tomcat下部署多个web服务,并且每个服务之间相互不影响,最长见的就是不使用相同的端口。

        5.一个service可配置多个connector,connector就是链接,客户端的访问必须有链接才能实现,链接可以是不同的端口,不同的协议,也就是port和protocol,一般protocol都是HTTP/1.1,也会改成其他的比如apr,tomcat7默认使用bio,8.5使用nio,只有优化的时候才需要更改,关于AJP/1.3可以不用开启,它是为了适配其他服务器(比如Apache服务器,IIS服务器)的使用的协议。

        6.一个service最多只能有一个Engine(没有验证),就是servlet处理器的一个实例。

        7.realm就是一个安全上下文,主要是处理用户角色关系,我也知道有啥用。

        8.一个engine可以配置多个host,一个host就代表一个宿主机,相当于不同的路径放的war,用不同的host访问。

        至此一个基本的配置文件就介绍完了

        二.核心组件

             借用网上的图

              tomcat的核心组件就两个:Connector和Container

              Connector:连接器

                      其主要作用就是接受客户端的请求,将请求组装成request和reponse,然后创建线程给Engine处理。connector可以定义多个,常见的有HTTP,SSL,AJP和proxy(JK),后面两个不常用,它有许多设置属性(可以看我的TOMCAT优化里面有说明),我们常用的就是port和protocol(协议相关)。

             Container:容器

                      这里的容器就是servlet容器,它上面运行着Engine,通常我们的war(也就是应用)就是在这里运行的。

             具体说下两个核心组件:

             Connector:

             

                       连接器的核心是ProtocolHandler,也就是处理器,它负责了连接器中的接受请求整理成request和response。

                       endpoint:包含了Acceptor、handler和异步超时检查。acceptor监听请求,交由handler来处理,endpoint实现了传输层TCP/IP协议,因为其接受的是socket,此时请求还未被封装,封装是在下一步进行的。

                      Processor:当执行到Processor时,processor会将socker包装成request,所以这里processor就需要实现应用层协议HTTP,最终将封装好的请求交由Adapeter处理。

                       Adapetr:adapetr的主要作用就是根据请求寻找适配后交由Container处理。

            Container:

                  

               Container采用的是责任链的模式,即其下的组件(子容器)是包含关系,一个Engine可以对应多个host(也就是过个虚拟主机ps:这里的虚拟主机只的就是一个网站,比如一个webapp,webapp1,webapp2对应不同的网站不同的虚拟主机,可以通过与之对应一个域名或者ip的方式访问,这个不要和虚拟机混淆) ,而我们通常说的一个应用实时上对应的是Host中的一个Context,一个host下可以有多个context,比如淘宝,它下面可能会有订单、用户、仓库等等的不同的应用,那么一个应用对应的就是一个context简单的说就是一个web.xml,比如我们的应用名就是一个context-path,而我们的应用下可能存在多个servlet,所以就会有多个wrapper。对于tomcat而言,其实Context不是必须的,因为有时候纯静态的文件比如css、html等就不需要Context。再给一副图理解一下

               总结一下就是:

                (1)Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine;
                (2)Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;
                (3)Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;
                (4)Wrapper:每一Wrapper封装着一个Servlet

        整理下关系:

                server:

                        service1:

                                Connector1:     

                                ConnectorN:

                                 Container:

                                        Engine:   

                                                host1:

                                                        context1:

                                                                wrapper1:

                                                                        servlet

                                                                wrapperN:

                                                        context1N:

                                                 hostN

                                       

                        serviceN:

              Container是怎样处理请求的:

              Pipeline-Valve(责任链,也可以理解为管道),责任链可能大家不太理解,说管道大家肯定知道,就是流式处理,上一步处理完成才能进行下一步,也可以理解为有顺序的同步,但是这里的责任链中有一点点不同就是,它的每一个容器最后都加了一个BaseValue,分别是StandardEngineValve、StandardHostValve、StandardContextValve、StandardWrapperValve

              

         上层管道执行到最后会执行自己的basevalue,此时basevalue会调用下级管道,如此依次执行直到执行到wrapper的basevalue,此时,StandardWrapperValue会创建于servlet相关的FilterChain这个我们可能比较熟悉,它是过滤链,应用中经常会用到的过滤器就是在其中运行的。当执行完所有的Filter的doFilter和servlet的service方法之后一个请求就算被处理完成了,最后将处理结果返回给Connector,Connector按socket返回给客户端。

     以上就是对TOMCAT结构及原理不算特别细致的介绍,如有不对的欢迎指出,我们共同学习。

 


http://chatgpt.dhexx.cn/article/BFvPsW7a.shtml

相关文章

Tomcat工作原理

本文以 Tomcat 5 为基础,也兼顾最新的 Tomcat 6 和 Tomcat 4。Tomcat 的基本设计思路和架构是具有一定连续性的。 Tomcat 总体结构 Tomcat 的结构很复杂,但是 Tomcat 也非常的模块化,找到了 Tomcat 最核心的模块,您就抓住了 Tom…

tomcat启动原理

前言 一直在用Tomcat,但是对其启动原理一直没去研究,这里准备去面试,可能会问道。于是总结了下启动原理。完全凭感觉去揣测,没工夫看源码。因此错误之处希望大家批评指正,大家共同进步。我想这也是在忙碌中进步最快的…

深入剖析Tomcat原理

深入剖析Tomcat原理 一、 Tomcat源码部署和运行(intellij IDEA) 1、下载tomcat源码,以tomcat-8为例 链接: https://tomcat.apache.org/ 2、源码部署到IDEA中 ①创建新的空工程 ②解压源码压缩包到该工程的目录(目录名最好是非…

Springboot内置Tomcat原理

SpringBoot的启动主要是通过实例化SpringApplication来启动的,启动过程主要做了以下几件事情:配置属性、获取监听器,发布应用开始启动事件初、始化输入参数、配置环境,输出banner、创建上下文、预处理上下文、刷新上下文、再刷新上…

【springboot】自动整合Tomcat原理

通过前面我们会SpringBoot的自动配置机制、Starter机制、启动过程的底层分析,我们拿一个实际的业务案例来串讲一下,那就是SpringBoot和Tomcat的整合。 我们知道,只要我们的项目添加的starter为:spring-boot-starter-web&#xff…

总结:SpringBoot内嵌Tomcat原理

一、介绍 一般我们启动web服务都需要单独的去安装tomcat,而Springboot自身却直接整合了Tomcat,什么原理呢? 二、原理 SpringBoot应用只需要引入spring-boot-starter-web中这个依赖,应用程序就默认引入了tomcat依赖,其…

Tomcat的架构原理

一、前言 Tomcat服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP程序的首选。同时它是运行在JVM中的一个进程,包含Web容器,相当于是Web容器和JVM之间的中间件。 二、…

浅析tomcat原理

浅析tomcat原理 上上个星期,看了一下how tomcat works这本书,今天捡起来看一会,发现忘得有点快,特地写点东西,加深一下记忆。因为书讲的是tomcat4,5的内容,比较旧了,所以和最新的to…

Tomcat底层原理

一、Tomcat启动时到底对我们的应用程序做了什么? 当我们把一个应用程序的war包放到Tomcat的webapps目录后,启动Tomcat,然后就可以通过浏览器发送Http请求访问该war包内的Servlet了。 这个过程包括: 1、启动Tomcat 2、Tomcat处理H…

tomcat的工作原理以及简介

Tomcat简介 Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器, 1.Tomcat是运行在JVM中的一个进程。它定义为【中间件】,顾名思义,是一个…

tomcat组成及工作原理

1 - Tomcat Server的组成部分 1.1 - Server A Server element represents the entire Catalina servlet container. (Singleton) 1.2 - Service A Service element represents the combination of one or more Connector components that share a single Engine Servic…

Tomcat工作原理介绍

Web应用程序都是靠Web服务器运行的,Tomcat是常用的Web服务器(兼具Servlet容器HTTP服务器功能)之一,此篇博客将从工作原理上来认识Tomcat。Tomcat作为Web服务器需要处理两类核心任务:处理 Socket 连接,负责网络字节流与Request和Re…

tomcat原理解析(一):一个简单的实现

一 概述 前段时间去面试,被人问到了tomcat实现原理。由于平时没怎么关注容器的实现细节,这个问题基本没回答上来。所以最近花了很多时间一直在网上找资料和看tomcat的源码来研究里面处理一个HTTP请求的流程。网上讲tomcat的帖子比较多,大多都…

Tomcat工作原理之运行机制

一、Tomcat运行原理分析1.Tomcat是运行在JVM中的一个进程。它定义为【中间件】,顾名思义,是一个在Java项目与JVM之间的中间容器。 2.Web项目的本质,是一大堆的资源文件和方法。Web项目没有入口方法(main方法),,意味着…

tomcat 工作原理

大致的架构是 jsptomcatmysql,记录tomcat学习一点笔记。 Tomcat是Servlet运行环境(容器),每个servlet执行init(),service(),destory() 以下是servlet的作用 Servlet的调用 Tomcat的工作模式3种:独立Servlet&#xff0c…

Tomcat的原理及架构

转自:https://zhuanlan.zhihu.com/p/35398064 俗话说,站在巨人的肩膀上看世界,一般学习的时候也是先总览一下整体,然后逐个部分个个击破,最后形成思路,了解具体细节,Tomcat的结构很复杂&#xf…

Tomcat基本原理

1.Tomcat核心: Http服务器Servlet容器 组件分工: 连接器Connector:处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。容器Container:加载和管理 Servlet,以及具体处理 Request 请求。 …

tomcat的工作原理

本文源自转载:你还记得 Tomcat 的工作原理么 一、Tomcat 整体架构 Tomcat 是一个免费的、开源的、轻量级的 Web 应用服务器。适合在并发量不是很高的中小企业项目中使用。 二、文件目录结构 以下是 Tomcat 8 主要目录结构 三、功能组件结构 Tomcat 的核心功能有…

Tomcat原理整理

目录接口 功能组件 Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。其中连接器和容器相辅相成,多个 Connector 和一个 Container 一起构成了基本的 web 服务 Service。每个 Serve…

Tomcat工作原理详细介绍

大部分企业的 Web 应用都运行在它上面,Tomcat 对于程序员来说算是老朋友了,那么今天带大家走近这位老朋友,看看它是如何处理 Web 请求,以及它内部的体系结构,这对帮助我们理解 Tomcat 的使用大有益处。 本文你将会学会…