`
brucewei777
  • 浏览: 84664 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tomcat结构图

    博客分类:
  • java
阅读更多
    从前看过关于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的范围了。
connector.getContainer().getPipeline().getFirst().invoke(request, response);

getContainer()返回一个Host对象,然后得到Host对象的Pipeline,在调用Pipeline中第一个Valve对象的invoke方法。在Host对象的Pipeline中的最后一个Valve是StandardHostValve。

在StandardHostValve里,invoke函数中有:
context.getPipeline().getFirst().invoke(request, response);

这句函数就开始进入Context的范围了。同样的,在Context对象的Pipeline中的最后一个Valve是StandardContextValve。

在StandardContextValve里,invoke函数中有:
wrapper.getPipeline().getFirst().invoke(request, response);

这句函数就进入Wrapper的范围了。
Wrapper是这里面最小的容器,其内部就没有其它子容器了。当执行到Wrapper对象的Pipeline中最后一个Valve(StandardWrapperValve)时,会有下面的语句:
filterChain.doFilter(request.getRequest(), 
                                response.getResponse());


在FilterChain里,当最后一个filter被调用后,就会运行下面的语句。
servlet.service(request, response);

到这里,一个request就经历了重重考验,到了其目的地。
  • 大小: 19.1 KB
  • 大小: 29.6 KB
分享到:
评论
19 楼 brucewei777 2011-01-14  
我决定再深入一下。
18 楼 sswh 2011-01-14  
不错啊  要是再详细一些就好了。

以前读过部分Tomcat的源码,可是一直没能好好的总结一下。
对Tomcat整体设计上的理解也还不够。
17 楼 txlaijava 2011-01-13  
或许是我的理解能力欠佳.
尚未明白楼主所阐述的思想.
16 楼 jerry.chen 2011-01-13  
感觉不够给力呀楼主 [url]http://18zixun.com/oracle/177.htm
[/url]
15 楼 xiaoY_Y_ 2011-01-13  
<p>雷声大雨点小, </p>
<p> 看这图把! </p>
14 楼 ownraul 2011-01-13  
还有各种container , server ,service , engine 之间的关系等等,这个太简单了
13 楼 jyslb 2011-01-13  
名字取的这么大,进来一看啥内容都没有
12 楼 wuxiao_v 2011-01-13  
期待完善版本推出。
11 楼 brucewei777 2011-01-13  
chainhou 写道
nurenok 写道
tomcat源码现在还有c++吗?还是纯java的

都还有。我前几天刚用SVN下下来。

还真有。
10 楼 chainhou 2011-01-13  
nurenok 写道
tomcat源码现在还有c++吗?还是纯java的

都还有。我前几天刚用SVN下下来。
9 楼 brucewei777 2011-01-13  
海风308 写道
受教了,谢谢。

互相的,互相的
8 楼 brucewei777 2011-01-13  
Durian 写道
绘图能力太差了。
我一直都有个心愿,如果有机会去日本公司培训画图能力。
他们的绘图表达能力真好。

你是说动漫?
7 楼 brucewei777 2011-01-13  
hyl1234 写道
lz的图是否太简洁了。对于Host,context,Wrapper之间的关系好像描述的不是那么清楚。


谢谢提醒
6 楼 brucewei777 2011-01-13  
michael.softtech 写道
这个不如不发,误导读者。
其实随便哪个tomcat下面的server.xml看一下都会比这种图有一个更加直观的认识。


高手。
5 楼 brucewei777 2011-01-13  
nurenok 写道
tomcat源码现在还有c++吗?还是纯java的

都是拿java开发的阿,我看到的都是java
4 楼 michael.softtech 2011-01-13  
这个不如不发,误导读者。
其实随便哪个tomcat下面的server.xml看一下都会比这种图有一个更加直观的认识。
3 楼 nurenok 2011-01-13  
tomcat源码现在还有c++吗?还是纯java的
2 楼 Durian 2011-01-13  
绘图能力太差了。
我一直都有个心愿,如果有机会去日本公司培训画图能力。
他们的绘图表达能力真好。
1 楼 hyl1234 2011-01-13  
lz的图是否太简洁了。对于Host,context,Wrapper之间的关系好像描述的不是那么清楚。

相关推荐

    tomcat部署图十分简单易懂,对初学者

    "Tomcat部署图十分简单易懂,对初学者" 从给定的文件信息中,我们可以提炼出以下几个知识点: 一、MyEclipse+Tomcat+Servlet 开发环境的搭建 * 安装 JDK 和 Tomcat,确保 Tomcat 安装之前安装了 JDK * 在 ...

    调整后的Tomcat配置文件.rar

    **Tomcat结构图** Tomcat的结构包括了几个主要组件,如Catalina(核心服务)、Common、Server、Shared以及Web应用程序本身。理解这些组件的作用和相互关系有助于更好地管理和配置Tomcat。 **Tomcat HTTPS** ...

    图解 Tomcat 体系结构

    Apache Tomcat 是一款非常著名的开源 Servlet/JSP 容器。 Apache Tomcat 是一款非常著名的开源 Servlet/...让我们先来浏览一下 Tomcat 体系结构中的六个主要概念: Server Service Engine Host Connector Context

    精通Apache Tomcat 6[2007年图书]

    其次,书中可能会详细介绍Tomcat的目录结构和文件系统布局,包括`conf`、`webapps`、`logs`和`temp`等目录的作用。此外,还会涉及部署应用程序的各种方式,如WAR文件的自动解压、目录部署和上下文配置。 接下来,...

    tomcat_爆破.zip

    1. **Apache Tomcat基础**:首先,理解Tomcat的基本结构和功能至关重要。它是Apache软件基金会的一个项目,用Java编写,作为Servlet和JSP容器运行Web应用。了解其工作原理、配置文件(如server.xml、web.xml)以及...

    apache-tomcat-8.0.33

    Apache Tomcat 8.0.33 是一个广泛使用的开源软件,它是一个实现了Java Servlet、JavaServer Pages(JSP)和Java EE的Web应用...通过了解其结构和配置,我们可以有效地管理和优化服务器性能,满足各种开发和生产需求。

    tomcat7解压版x64下载

    6. `webapps`:Web应用程序部署的目录,解压后的WAR文件或已创建的目录结构都可以放在这里。 7. `work`:存放JSP编译后的类文件和Servlet生成的临时文件。 为了运行Tomcat,你需要配置`conf/server.xml`,根据你的...

    tomcat-7.0.0安装版和tomcat-7.0.11免安装版

    此外,安装版还会将必要的文件和目录结构部署到预定义的系统位置,如`C:\Program Files`(默认情况下)。用户可以根据需要选择安装路径、端口号、服务启动选项等。 相比之下,"apache_tomcat-7.0.11.zip"是免安装版...

    apache-tomcat9

    Apache Tomcat 是一个开源的Java Servlet容器,它实现了Java EE Web应用程序规范,特别是Servlet和JavaServer Pages (JSP)。...正确配置和理解Tomcat的内部结构和配置文件对于优化性能和稳定性至关重要。

    Tomcat安装包和压缩包

    【标题】:“Tomcat安装包和压缩包” 【正文】: Tomcat,全名Apache Tomcat,是一款开源的Java Servlet容器,由Apache...无论哪种方式,理解Tomcat的基本结构和工作原理对于管理和优化Java Web应用都是至关重要的。

    tomcat工作原理深入解析

    Tomcat的结构图直观展示了各个组件的层次关系和数据流向,从Server到Service,再到Connector、Engine、Host和Context,形成一个完整的请求处理链路。 3. 配置文件$CATALINA_HOME/conf/server.xml server.xml是...

    apache-tomcat-8.5.23-安装版和免安装版.rar

    2. **目录结构**:Tomcat的目录结构包括`bin`(存放可执行文件和脚本)、`conf`(配置文件)、`lib`(共享库)、`webapps`(部署的Web应用程序)、`logs`(日志文件)等。 3. **部署应用**:将WAR文件或解压后的...

    孙卫琴Tomcat与JavaWeb开发技术详解

    3. **Tomcat目录结构**:详述每个目录的作用,如WEB-INF、conf、logs、temp等,理解这些目录对于管理和维护Tomcat至关重要。 4. **Servlet与JSP基础**:讲解Servlet和JSP的基本概念,包括生命周期、请求响应处理...

    Tomcat7部署多个Web项目的方法-有图有真相

    根据提供的文件信息,下面详细介绍在Tomcat7上部署多个Web项目的方法,这些知识点包括了配置文件的编辑、部署路径的管理以及特定开发环境下的项目结构调整。 首先,Tomcat作为一个应用服务器,用于托管Java Web应用...

    图书馆管理系统jsp+tomcat+oracle

    2. 设计阶段:制定数据库结构,设计页面布局,规划系统架构。 3. 编码实现:利用JSP编写前端页面,结合Servlet处理业务逻辑,与Oracle数据库交互。 4. 测试调试:进行单元测试、集成测试,确保各模块功能正常。 5. ...

    tomcat7.0.70

    首先,让我们深入了解Tomcat的结构和核心组件: 1. **bin目录**:这个目录包含了启动和停止Tomcat的脚本,如`catalina.sh`或`catalina.bat`,以及用于管理Tomcat服务的其他工具,如`startup.sh`和`shutdown.sh`。 ...

    TOMCAT6.0.33安装版和解压版集合

    Apache Tomcat 6.0.33 是一个广泛使用的开源软件,它是一个实现了Java Servlet和JavaServer Pages(JSP)规范的...在实际操作中,理解Tomcat的基本结构和配置,以及如何部署和管理Web应用程序,是提升工作效率的关键。

    Tomcat启动分析以及如何启动

    Tomcat的结构图通常显示了这些组件之间的层次关系,即Server包含一个或多个Service,Service包含一个Engine,Engine下面有多个Host,每个Host管理多个Context。 3. 配置文件`$CATALINA_HOME/conf/server.xml`详解 ...

    tomcat 6.0.3

    【标题】"Tomcat 6.0.3"是一个经典的Java应用服务器,它主要用于部署和运行Java Servlets和JavaServer Pages(JSP)。这个版本发布于2010年,虽然现在已经较为老旧,但对于学习基础的Web应用部署和理解Servlet容器的...

Global site tag (gtag.js) - Google Analytics