`
ss1
  • 浏览: 79789 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Tomat6的整体架构

阅读更多

在上篇文章中,我们已经成功将Tomcat6.0 的源代码导入到 Eclipse IDE 中。现在我们就开始学习 Tomcat 源码。 Tomcat 源代码共有 1000 多个 java 类,代码行数大约 28 万到 30 万行左右。从项目规模上说,可算得上是一个中型项目。要学习理解 Tomcat 源代码,我们有多种办法可行。最原始的一种办法就是,打开 Debugger ,逐行跟踪,看看 Tomcat 如何启动,如何处理客户端请求,如何编译动态 jsp 页面。第二种办法是利用逆向工程,把 Tomcat 的总体类图先描绘出来,然后再结合 sequence diagram ,来学习理解它。我们在这里采取从顶到底的阅读方法,先了解整体架构,然后逐步细化。所谓“纲举目张”,说的就是这个道理。

首先,我们可以从功能的角度将 Tomcat 源代码分成 5 个子模块,它们分别是:

1)   Jsper 子模块

这个子模块负责 jsp 页面的解析, jsp 属性的验证,同时也负责将 jsp 页面动态转换为 java 代码并编译成 class 文件。在 Tomcat 源代码中,凡是属于 org.apache.jasper 包及其子包中的源代码都属于这个子模块;


2)   Servlet Jsp 规范的实现模块

这个子模块的源代码属于 javax.servlet 包及其子包,如我们非常熟悉的 javax.servlet.Servlet 接口、 javax.servet.http.HttpServlet 类及 javax.servlet.jsp.HttpJspPage 就位于这个子模块中;


3)   Catalina 子模块

这个子模块包含了所有以 org.apache.catalina 开头的 java 源代码。该子模块的任务是规范了 Tomcat 的总体架构,定义了 Server Service Host Connector Context Session Cluster 等关键组件及这些组件的实现,这个子模块大量运用了 Composite 设计模式。同时也规范了 Catalina 的启动及停止等事件的执行流程。从代码阅读的角度看,这个子模块是我们阅读和学习的重点。


4)   Connectors 子模块

如果说上面三个子模块实现了 Tomcat 应用服务器的话,那么这个子模块就是 Web 服务器的实现。所谓连接器 (Connector) 就是一个连接客户和应用服务器的桥梁,它接收用户的请求,并把用户请求包装成标准的 Http 请求 ( 包含协议名称,请求头 Head ,请求方法是 Get 还是 Post 等等 ) 。同时,这个子模块还按照标准的 Http 协议,负责给客户端发送响应页面,比如在请求页面未发现时,connector就会给客户端浏览器发送标准的 Http 404 错误响应页面。

Tomcat 实现了两类连接器,除了上述实现了 Http1.1 协议的 Coyote 连接器外,还有一种 JK 连接器,JK 连接器是将Tomcat 和第三方 Web 服务器 ( Apache IIS Web 服务器 ) 连接起来, Tomcat 此时充当应用服务器的角色,负责处理和解释 Jsp Servlet 请求。

Coyote 连接器的源代码位于以 org.apache.coyote 开头的包中, JK 连接器的代码位于以 org.apache.jk 开头的包中。

另外, Tomcat 虽然实现了 Web 服务器的功能,但是其实现不是非常完美,效率不高,所以在生产环境中,我们通常要将 Tomcat Apache Web Server 配合使用,尽量利用它们各自的优势。


5)   Resource 子模块

这个子模块包含一些资源文件,如 Server.xml Web.xml 配置文件。严格说来,这个子模块不包含 java 源代码,但是它还是 Tomcat 编译运行所必需的。


上面我们从模块组件的角度,简单介绍了 Tomcat 的子模块划分及其相应的功能。下面我们简单以图示意之。




从上面的Tomcat 子模块示意图中,我们可以看到,来自客户端的请求首先由 Connector 子模块进行处理,然后根据情况或者发送到第三方的 Web 服务器,或者转发到 Jsper 模块进行处理,或者转发到 Jsp/Servlet 子模块处理。总体说来, Tomcat 通过下面三种方式处理来自客户端的请求:

(1)   如果客户端发出静态页面请求,如果没有配置第三方 Web 服务器,此时客户端的请求直接交由 Coyote Connector 子模块处理,然后返回结果;如果配有第三方应用服务器,那么客户的请求直接由第三方应用服务器响应,然后返回静态记过页面。客户端请求的执行过程如图中绿线所示。


(2)   如果客户端请求 Jsp 页面,该请求首先转发到发送 Coyote 连接器 ( 在没有配置第三方 Web 服务器的情况下 ) ,或者经过第三方 Web 服务器将客户请求转发到 JK 连接器;然后该 Jsp 请求将交给 Jsper 子模块处理, Jsper 将根据情况验证编译该 Jsp 页面,最后由 Jsp/Servlet 模块对客户请求进行处理。 Jsp 请求处理完毕,服务器首先把响应结果发送给连接器子模块,连接器子模块根据情况或将响应结果页面发送到第三方 Web 服务器,或者直接发送响应结果页面到客户端。


(3)   如果客户请求 Servlet Tomcat 的处理流程和 Jsp 页面的请求执行流程基本类似,只不过少了一个 Jsper 子模块处理罢了。

分享到:
评论
1 楼 康跷_0613 2013-01-29  
请问利用逆向工程怎么分析出类图,哪里有相关详细的介绍呢?

相关推荐

    tomcat 架构 分析

    一、Tomcat整体架构概述 Tomcat架构具有模块化特性,其核心部分由两个组件构成:Connector(连接器)和Container(容器)。这两者在Tomcat中扮演着极其重要的角色。Connector组件负责接收客户端的请求,它在Tomcat...

    Tomcat整体架构

    【Tomcat整体架构】 Tomcat,作为Apache软件基金会的开源项目,是世界上最流行的Java Servlet容器,主要用于运行基于Java EE的Web应用程序。理解Tomcat的整体架构对于优化应用性能、排查问题和进行扩展至关重要。 ...

    Tomcat_系统架构与模式设计分析.doc

    在整体架构中,Server是最高级别的组件,负责管理整个Tomcat实例的生命周期。Service是连接Connector和Container的桥梁,它可以拥有多个Connector,但仅对应一个Container。Connector,如同Tomcat的“门面”,负责与...

    Nginx+KeepAlived+Tomcat负载架构

    - **整体架构**:采用Nginx作为反向代理,后端部署多个Tomcat实例,利用KeepAlived实现Nginx的主备切换,形成一套完整的高可用架构。 - **关键组件**: - **Nginx**:作为前端负载均衡器。 - **KeepAlived**:用于...

    tomcat6-X64位

    2. **conf**:存储服务器的配置文件,如`server.xml`定义了Tomcat的整体结构,`web.xml`是全局的Servlet和过滤器配置。 3. **lib**:包含Tomcat运行所需的库文件,包括Servlet和JSP API的jar文件。 4. **webapps**:...

    tomcat源码+文档pdf+源码解析

    Tomcat是Apache软件基金会下的一个开源项目,是一个广泛使用的Java ...通过学习源码、查阅文档并理解源码解析,你不仅可以提升你的Java Web开发技能,还能更好地优化和调试你的应用程序,从而提高整体的系统性能。

    架构解析——Tomcat

    《架构解析——Tomcat》是刘光瑞撰写的一本深入探讨Tomcat的书籍,共380页,采用PDF格式,包含索引书签目录,方便读者...通过深入学习,读者不仅可以掌握Tomcat的使用,还能提升对Java Web技术的整体理解和应用能力。

    tomcat架构解析

    详细介绍Tomcat的内存架构,Servlet容器的开发。tomcat是一个很大的系统,有复杂的结构,想要了解它,就应该顺着开发者设计之初的思路来,先了解整体的结构,对整体有了一定的掌控后,再逐个分析,了解感兴趣的细节...

    「Tomcat源码剖析」.pdf

    Tomcat源码剖析 : 整体架构 层层分析 源码解析 架构分析 (Http服务器功能:Socket通信(TCP/IP)、解析Http报文 Servlet容器功能:有很多Servlet(自带系统级Servlet+自定义Servlet),Servlet处理具体的业务逻辑...

    Apache Tomcat_Window平台_三层架构部署.doc

    Apache Tomcat 在Window平台上进行三层架构...总的来说,Apache Tomcat在Window平台上的三层架构部署是构建大规模、高可用、可扩展的企业级应用的常见方案,它充分利用了各层的功能,提高了系统的整体性能和稳定性。

    nginx+tomcat+redis+mysq集群部署方案.docx

    总结,这个集群部署方案涵盖了从基础软件安装、配置到整体架构设计的全过程,旨在构建一个高效、稳定、可扩展的Web服务系统。通过Nginx的负载均衡和Tomcat的集群处理,以及Redis的缓存支持,能够应对高并发场景,...

    Tomcat运行内幕-How Tomcat Works

    Chapter02 "Tomcat Architecture"探讨了Tomcat的整体架构,包括Catalina(核心Servlet容器)、Jasper(JSP编译器)、 Coyote(HTTP连接器)和Apr(Apache Portable Runtime)等组件。Catalina处理请求响应流程,...

    tomcat 源码分析系列文档

    7. "tomcat源码分析之一架构.pdf":可能涵盖了Tomcat的整体架构,包括Catalina、 Coyote、Jasper等主要模块的功能和相互关系。 8. "HTTP协议详解.pdf":作为基础,此文档提供了HTTP协议的详细讲解,帮助读者理解...

    Tomcat书籍

    1. Tomcat架构:书中会介绍Tomcat的整体架构,包括Catalina、Jasper、Apr等核心组件的功能和相互作用,使读者明白Tomcat如何处理HTTP请求和响应。 2. 配置详解:深入解析服务器配置文件,如server.xml、web.xml,...

    Tomcat-6-Windows-x86+Tomcat-7-Windows-x64+Tomcat-8-Windows-x64

    在本压缩包中,包含了三个不同版本的Tomcat,分别是Tomcat 6、Tomcat 7和Tomcat 8,分别适用于Windows x86和x64架构。以下将详细讲解这三个版本以及它们在Windows环境下的安装和使用。 1. **Tomcat 6** - **概述**...

    nginx-tomcat6_session共享Memcached包.zip

    本项目“nginx-1.9.3--tomcat-(6)-memcached-session共享session负载均衡”聚焦于如何在Nginx、Tomcat6以及Memcached之间实现Session共享,以确保用户会话在集群环境中的连续性。 首先,让我们了解核心组件的作用:...

    tomcat调优.zip

    文件15-Tomcat整体架构及其设计精髓分析-fox可能会详细阐述上述架构和设计思路,帮助读者理解Tomcat如何处理请求和管理资源。文件16-Tomcat线程模型详解&性能调优-fox将深入探讨线程池的工作原理和优化技巧,指导...

    Tomcat 64 版本从6-9

    64位版本的Tomcat是专门为64位操作系统设计的,能够利用现代处理器架构的优势,提供更好的性能和更高的内存利用率。随着Java技术的发展,Tomcat也经历了多个版本的迭代,从6到9每个版本都有其独特的改进和增强。 ...

Global site tag (gtag.js) - Google Analytics