`

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) ServletJsp规范的实现模块

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


3) Catalina子模块

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


4) Connectors子模块

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

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

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

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


5) Resource子模块

这个子模块包含一些资源文件,如Server.xmlWeb.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) 如果客户请求ServletTomcat的处理流程和Jsp页面的请求执行流程基本类似,只不过少了一个Jsper子模块处理罢了。

分享到:
评论

相关推荐

    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