`
ss1
  • 浏览: 77619 次
  • 性别: 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整体架构

    整体架构图 Service接口 Server接口 生命周期接口Lifecycle

    「Tomcat源码剖析」.pdf

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

    tomcat架构解析

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

    Jetty和tomcat比较.docx

    相同点: 1. Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。     ...Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。  

    Tomcat 结构概述

    详细的介绍了Tomcat 服务器的整体架构,是份好东西。

    Tomcat.png

    该资料讲述了五大方面: 1. Web应用服务器 2. tomcat整体架构 3. 源码解读 4. 性能优化 5. 常见问题排查方法

    tomcat笔记_已.docx

    文档为tomcat8.5的学习笔记,从宏观的整体架构,到各个组件的介绍,以及组件之间的关联。

    Spring+Tomcat源码级分析-网盘链接提取码下载 .txt

    掌握核心架构课程,课程由一线大厂的工程师带领同学们总览设计模式,然后进阶到核心的Spring源码级分析课程。课程还包括了创建型模式讲解,结构型模式介绍,行为模式与Spring框架的整体流程。同时可贵的是没有进行...

    Android订餐系统毕业设计

    3.2.2服务器(Tomcat端)整体框架 15 3.2.3商家后台(网页版)买卖整体框架 16 3.3架构讲解 17 3.3.1客户端(android手机端) 17 3.3.2服务器端(Tomcat) 18 3.3.3商家后台(网页版) 18 3.4数据库表视图 18 3.5所需的开发...

    毕业设计:基于SSM的-mysql-在线音乐网站(源码 + 数据库 + 说明文档)

    4.1整体架构 6 4.2系统结构设计 6 4.3功能模块设计 7 4.4系统安全设计 8 4.5表单字段校验处理设计 8 4.6系统维护设计 8 4.7数据库设计 8 4.7.1数据库设计概述 8 4.7.2概念设计 9 4.7.3逻辑设计 9 4.7.3物理设计 9 第...

    AscotShop:该商城系统主要使用servlet、jsp、jstl、filtert,整体架构使用mvc模式,数据库mysql使用DButils进行操作,服务器部分使用tomcat进行部署,本项目适合新手练习javaEE开发中的基础知识

    AscotShop商城系统

    数字博物馆系统的设计与实现(论文+源码)-kaic.docx

    4.1整体架构 4.2系统建模 4.3 数据仓库设计 第5章 系统实现 5.1基本论述 5.2主页面的实现 5.3登录分块的实现 5.4管理员管理分块的实现 5.5藏品管理分块的实现 5.6类别管理分块的实现 5.7藏品保管管理分块的实现 5.8...

    毕业论文_基于SSH框架的论坛的设计与实现

    这个是本人做的毕业设计,题目叫做基于SSH框架的论坛的设计与实现,集成了Struts2.3.4 Spring3.2 Hibernate4.1.9 Junit4 ,服务器用的是tomcat7.0 开发工具用的是MyEclipse10 数据库用的是MySQL5.5 整体架构为三层...

    基于JavaWeb+JSP的校园二手交易平台(源码+数据库+说明文档)

    一、功能描述 ... 后端:商品列表、用户列表(用户信息修改)。 二、开发环境 Web服务器:Tomcat 8.0以上。 Java开发包:JDK 8。...校园二手交易平台采用的是JavaWeb+MySQL+JQuery+Apache-Tomcat作为系统整体的架构。

    基于JSP的图书管理系统的设计与实现

    该课题旨在设计并开发一个基于B/S结构的图书管理系统,通过Java开发Web应用程序,给出了图书管理系统的整体架构,弥补了基于网络的图书管理系统功能不全的问题。 本课题首先介绍了图书管理系统的目的、意义以及国...

    开涛高可用高并发-亿级流量核心技术

    17.2 整体架构 349 17.3 一些架构思路和总结 350 17.3.1 两种读服务架构模式 351 17.3.2 本地缓存 352 17.3.3 多级缓存 353 17.3.4 统一入口/服务闭环 354 17.4 引入Nginx接入层 354 17.4.1 数据校验/过滤逻辑前置 ...

    基于Springboot和BS架构的宠物健康咨询系统pf.zip

    ⑨ 服务平台:Tomcat 8.0/9.0 ⑩ 数据库工具:SQLyog/Navicat ⑪ 开发软件:eclipse/myeclipse/idea ⑫ 浏览器:谷歌浏览器/微软edge/火狐 ⑬ 技术栈:Java、Mysql、Maven、Springboot、Mybatis、Ajax、Vue等 2、...

    分布式架构演进过程

    在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:1:分布式系统中的多个模块在不同的服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器...

Global site tag (gtag.js) - Google Analytics