原文:http://carllgc.blog.ccidnet.com/blog-htm-do-showone-uid-4092-type-blog-itemid-272088.html
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子模块处理罢了。
分享到:
相关推荐
一、Tomcat整体架构概述 Tomcat架构具有模块化特性,其核心部分由两个组件构成:Connector(连接器)和Container(容器)。这两者在Tomcat中扮演着极其重要的角色。Connector组件负责接收客户端的请求,它在Tomcat...
【Tomcat整体架构】 Tomcat,作为Apache软件基金会的开源项目,是世界上最流行的Java Servlet容器,主要用于运行基于Java EE的Web应用程序。理解Tomcat的整体架构对于优化应用性能、排查问题和进行扩展至关重要。 ...
在整体架构中,Server是最高级别的组件,负责管理整个Tomcat实例的生命周期。Service是连接Connector和Container的桥梁,它可以拥有多个Connector,但仅对应一个Container。Connector,如同Tomcat的“门面”,负责与...
- **整体架构**:采用Nginx作为反向代理,后端部署多个Tomcat实例,利用KeepAlived实现Nginx的主备切换,形成一套完整的高可用架构。 - **关键组件**: - **Nginx**:作为前端负载均衡器。 - **KeepAlived**:用于...
2. **conf**:存储服务器的配置文件,如`server.xml`定义了Tomcat的整体结构,`web.xml`是全局的Servlet和过滤器配置。 3. **lib**:包含Tomcat运行所需的库文件,包括Servlet和JSP API的jar文件。 4. **webapps**:...
Tomcat是Apache软件基金会下的一个开源项目,是一个广泛使用的Java ...通过学习源码、查阅文档并理解源码解析,你不仅可以提升你的Java Web开发技能,还能更好地优化和调试你的应用程序,从而提高整体的系统性能。
《架构解析——Tomcat》是刘光瑞撰写的一本深入探讨Tomcat的书籍,共380页,采用PDF格式,包含索引书签目录,方便读者...通过深入学习,读者不仅可以掌握Tomcat的使用,还能提升对Java Web技术的整体理解和应用能力。
Tomcat源码剖析 : 整体架构 层层分析 源码解析 架构分析 (Http服务器功能:Socket通信(TCP/IP)、解析Http报文 Servlet容器功能:有很多Servlet(自带系统级Servlet+自定义Servlet),Servlet处理具体的业务逻辑...
详细介绍Tomcat的内存架构,Servlet容器的开发。tomcat是一个很大的系统,有复杂的结构,想要了解它,就应该顺着开发者设计之初的思路来,先了解整体的结构,对整体有了一定的掌控后,再逐个分析,了解感兴趣的细节...
Apache Tomcat 在Window平台上进行三层架构...总的来说,Apache Tomcat在Window平台上的三层架构部署是构建大规模、高可用、可扩展的企业级应用的常见方案,它充分利用了各层的功能,提高了系统的整体性能和稳定性。
总结,这个集群部署方案涵盖了从基础软件安装、配置到整体架构设计的全过程,旨在构建一个高效、稳定、可扩展的Web服务系统。通过Nginx的负载均衡和Tomcat的集群处理,以及Redis的缓存支持,能够应对高并发场景,...
Chapter02 "Tomcat Architecture"探讨了Tomcat的整体架构,包括Catalina(核心Servlet容器)、Jasper(JSP编译器)、 Coyote(HTTP连接器)和Apr(Apache Portable Runtime)等组件。Catalina处理请求响应流程,...
7. "tomcat源码分析之一架构.pdf":可能涵盖了Tomcat的整体架构,包括Catalina、 Coyote、Jasper等主要模块的功能和相互关系。 8. "HTTP协议详解.pdf":作为基础,此文档提供了HTTP协议的详细讲解,帮助读者理解...
1. Tomcat架构:书中会介绍Tomcat的整体架构,包括Catalina、Jasper、Apr等核心组件的功能和相互作用,使读者明白Tomcat如何处理HTTP请求和响应。 2. 配置详解:深入解析服务器配置文件,如server.xml、web.xml,...
在本压缩包中,包含了三个不同版本的Tomcat,分别是Tomcat 6、Tomcat 7和Tomcat 8,分别适用于Windows x86和x64架构。以下将详细讲解这三个版本以及它们在Windows环境下的安装和使用。 1. **Tomcat 6** - **概述**...
本项目“nginx-1.9.3--tomcat-(6)-memcached-session共享session负载均衡”聚焦于如何在Nginx、Tomcat6以及Memcached之间实现Session共享,以确保用户会话在集群环境中的连续性。 首先,让我们了解核心组件的作用:...
文件15-Tomcat整体架构及其设计精髓分析-fox可能会详细阐述上述架构和设计思路,帮助读者理解Tomcat如何处理请求和管理资源。文件16-Tomcat线程模型详解&性能调优-fox将深入探讨线程池的工作原理和优化技巧,指导...
64位版本的Tomcat是专门为64位操作系统设计的,能够利用现代处理器架构的优势,提供更好的性能和更高的内存利用率。随着Java技术的发展,Tomcat也经历了多个版本的迭代,从6到9每个版本都有其独特的改进和增强。 ...