在上篇文章中,我们已经成功将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的内存架构,Servlet容器的开发。tomcat是一个很大的系统,有复杂的结构,想要了解它,就应该顺着开发者设计之初的思路来,先了解整体的结构,对整体有了一定的掌控后,再逐个分析,了解感兴趣的细节...
Tomcat源码剖析 : 整体架构 层层分析 源码解析 架构分析 (Http服务器功能:Socket通信(TCP/IP)、解析Http报文 Servlet容器功能:有很多Servlet(自带系统级Servlet+自定义Servlet),Servlet处理具体的业务逻辑...
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每个版本都有其独特的改进和增强。 ...