从前看过关于Tomcat的书,但是很快就忘记了。这次又看了一遍,随手画了个草图,来帮助记忆,没办法,我这个人,看图记忆有效些。
Tomcat里有容器(Container)这么个概念,还有连接器(Connector)。我这幅图只画了容器这块儿的。
总共有四种类型的容器:engine,host,context和wrapper。一个context里一般有一个或者多个wrapper,每个wrapper都对应了一个servlet。容器内所有组件的生命周期都由容器负责;容器内所有组件的行为都能受到容器的监控;容器可以对进出容器内部的数据进行改动。这是我能想到的采用容器的好处。
如上图所示,图片中象梯子一样的那部分,我想用它代表容器的Pipeline。Host有自己的Pipeline,Context也有自己的Pipeline。一格一格的表示这个Pipeline里有很多Valve。Valve用来控制进入Host内部的数据。
在最靠近Host内部的一个Valve,也就是数据进入Host要通过的最后一个Valve,叫做BasicValve。如果Host里有很多个Context,就是说有很多个Web程序,数据流在BasicValve里就会流向相应Context的Pipeline。
鉴于上面的内容有些浅薄,那我再进一小步吧。
我就按照上图来浅浅地描述一下request被处理的流程。
对于每一个HTTP请求,connector调用其关联的container的invoke方法,该container调用其子容器的invoke方法。具体实现是在CoyoteAdapter的service方法里,由下面这一句就进入了Container的范围了。
Java代码
connector.getContainer().getPipeline().getFirst().invoke(request, response);
connector.getContainer().getPipeline().getFirst().invoke(request, response);
getContainer()返回一个Host对象,然后得到Host对象的Pipeline,在调用Pipeline中第一个Valve对象的invoke方法。在Host对象的Pipeline中的最后一个Valve是StandardHostValve。
在StandardHostValve里,invoke函数中有:
Java代码
context.getPipeline().getFirst().invoke(request, response);
context.getPipeline().getFirst().invoke(request, response);
这句函数就开始进入Context的范围了。同样的,在Context对象的Pipeline中的最后一个Valve是StandardContextValve。
在StandardContextValve里,invoke函数中有:
Java代码
wrapper.getPipeline().getFirst().invoke(request, response);
wrapper.getPipeline().getFirst().invoke(request, response);
这句函数就进入Wrapper的范围了。
Wrapper是这里面最小的容器,其内部就没有其它子容器了。当执行到Wrapper对象的Pipeline中最后一个Valve(StandardWrapperValve)时,会有下面的语句:
Java代码
filterChain.doFilter(request.getRequest(),
response.getResponse());
filterChain.doFilter(request.getRequest(),
response.getResponse());
在FilterChain里,当最后一个filter被调用后,就会运行下面的语句。
Java代码
servlet.service(request, response);
servlet.service(request, response);
到这里,一个request就经历了重重考验,到了其目的地。
分享到:
相关推荐
这是一份tomcat5启动时的时序图,对于理解tomcat的结构很有帮助
Apache Tomcat 是一款非常著名的开源 Servlet/JSP 容器。 Apache Tomcat 是一款非常著名的开源 Servlet/...让我们先来浏览一下 Tomcat 体系结构中的六个主要概念: Server Service Engine Host Connector Context
tomcat中server配置文件的结构,以及处理一个http请求的全过程
这是我学习SSH时候做的案例,非常适合学习,这是按照标准的java EE规范写的代码。价值很大。欢迎参考和下载。只需要设计一张数据库表直接导入myeclipse可以直接中。类库齐全。现在和大家分享,共同学习和进步。
基本结构 首先要明白两个基本知识点: 平时我们在地址栏里面输入http://www.domain.com 访问的是80端口,相当于http://www.domain.com:80 而 https://www.domain.com 使用的是443端口 那么问题就来了,如果多个系统...
采用apache->tomcat这样的结构才具有更特出的优点,主要体现在具有更好的可扩展性和安全性。这种类型的站点的主要特点是每一个页面都可能是动态生成的,但这些数据中主要部分还是静态的(比如,各类图像GIF、JPG、...
《程序猿必须知道的关于 Tomcat 的知识点》博客附件。 博客地址:https://blog.csdn.net/Supreme_Sir/article/details/111027495
类继承图 直接子类 所有已知子接口 所有已知实现类 类/接口声明 类/接口描述 嵌套类摘要 字段摘要 构造函数摘要 方法摘要 字段详细信息 构造函数详细信息 方法详细信息 每个摘要条目都包含该项目的详细描述的第...
简介:这个分为两个部分的系列文章将研究ApacheTomcat的系统架构以及其运用的很多经典设计模式。本文是第1部分,将主要从Tomcat如何分发请求、如何处理多用户同时请求,还有它的...下面是Tomcat的总体结构图:图1.Tomca
Tomcat背景.Tomcat目录.server.xml配置简介.web.xml配置简介
catalina结构图 1 tomcat的版本4和版本5 2 章节简介 2 第1章 一个简单的Web服务器 3 1.1 The Hypertext Transfer Protocol (HTTP) 3 1.2 HTTP Request 3 1.3 HTTP Response 4 1.4 Socket类 4 1.5 ServerSocket类 5 ...
BBS-CS文件结构: 在BBS-CS的文件包中有home、src、jar、doc四个目录。 其中:home下是程序文件,src下是源码,jar下是工具文件包,doc下是文档。 Home |---admin(管理目录) | |---images(图像文件) | |---upload...
接着对系统中的数据库进行模型设计,包括数据流图、实体联系图及数据表结构。在系统的设计与实现中,确定系统的开发思想以及开发环境,并对系统中的Java Bean和Controller代码进行设计。最后给出了系统中模块的详细...
总体架构:1、面向组件架构2、基于JMX3、事件侦听tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成,如Server、Service、Connector等,并基于JMX管理这些组件,另外实现以上接口的组件也...
Tomcat8-源代码-阅读 :flexed_biceps: Tomcat8-源代码读取 当你Tomcat8-Source-Read以下类似问题时, Tomcat8-Source-Read可以帮你: 想系统的读一个开源软件的...以及持续更新类结构图和关键逻辑的流程图。 ☞微型
requestProcess.pdf-Tomcat请求处理流程序列图(2014.10.28-2014.10.29) 架构/-Tomcat服务器的架构结构和设计(2014.10.29-2014.10.29) server.xml-Tomcat容器配置文件(2014.10.29-) config /-Tomcat配置引用...
基本结构 首先要明白两个基本知识点: 平时我们在地址栏里面输入http://www.domain.com 访问的是80端口,相当于http://www.domain.com:80 而 https://www.domain.com 使用的是443端口 那么问题就来了,如果多个系统...
catalina结构图 1 tomcat的版本4和版本5 2 章节简介 2 第1章 一个简单的Web服务器 3 1.1 The Hypertext Transfer Protocol (HTTP) 3 1.2 HTTP Request 3 1.3 HTTP Response 4 1.4 Socket类 4 1.5 ServerSocket类 5 ...