`
flm_llx
  • 浏览: 62513 次
  • 性别: Icon_minigender_1
  • 来自: 应县
社区版块
存档分类
最新评论

Tomat源码学习(二) [图片]

    博客分类:
  • java
阅读更多
Tomat源码学习(二)
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源码及素材” 在IT行业中,TomCat是一个广泛使用的开源Web服务器和Servlet容器,它是Java EE应用程序开发的重要组成部分。这个“TomCat源码及素材”文件很可能是某位开发者创建的一个小型项目,...

    jsp+tomcat的wap源码

    开发者可能需要解压这个文件,然后在Tomcat环境下进行配置和部署,以便于学习或修改源码。 总的来说,这个源码包提供了使用JSP和Tomcat开发WAP应用的实际案例,涵盖了JSP语法、Tomcat服务器配置、以及针对移动设备...

    基于Javaweb+Tomcat+MySQL的大学生公寓管理系统源码+数据库+示例图片.zip

    基于Javaweb+Tomcat+MySQL的大学生公寓管理系统源码+数据库+示例图片.zip基于Javaweb+Tomcat+MySQL的大学生公寓管理系统源码+数据库+示例图片.zip 基于Javaweb+Tomcat+MySQL的大学生公寓管理系统源码+数据库+示例...

    how tomcat works( 深入剖析tomcat) 的随书源码

    《深入剖析Tomcat》这本书是Java开发者们了解和学习Tomcat服务器的重要参考资料,它详细解析了Tomcat的工作原理和内部机制。随书源码则为读者提供了实践和探索的平台,帮助读者更深入地理解书中的理论知识。下面将...

    mars-MP3项目整合(包括源码+tomcat部署文件)

    MP3项目整合(包括源码+tomcat部署文件)”,它再次强调了项目的关键特性,即提供了完整的源代码和部署方案,这对于开发者、学生或者对Java Web技术感兴趣的人来说,是一个宝贵的资源,可以用来学习实际项目开发流程,...

    tomcat启动.png

    tomcat启动流程图,我花了几个小时的时间生成的,对学习tomcat源码很有帮助,这是粒度最小的一张图,如果想要粗粒度的可以私信联系我。

    jsp+tomcat+mysql实现页面登录注册

    这种验证码通常是一张包含扭曲字母或数字的图片,用户需要正确输入图片中的字符才能完成表单提交,从而增加了系统的安全性。 综上所述,这个项目涵盖了Web开发的基础知识,包括前端的JSP页面设计,后端的Tomcat...

    Java基于Tomcat服务器的网上商城源码.zip

    【标题】"Java基于Tomcat服务器的网上商城源码"是一个使用Java编程语言开发的电子商务平台,它构建在Tomcat应用服务器之上。Tomcat是Apache软件基金会的Jakarta项目的一个核心项目,是一款开源且轻量级的Web应用...

    apache-tomcat-9.0.24.rar

    总之,通过学习和实践Apache Tomcat 9.0.24,结合Java编程,你可以构建出功能完善的验证码系统,同时深化对Java Web开发的理解。在这个过程中,你会接触到Servlet、JSP、HTTP协议、Web容器等多个重要概念,这对于...

    web服务器和tomcat服务器配置

    了解Web服务器和Tomcat服务器的源码能帮助开发者深入理解其工作原理,从而更好地优化性能或定制功能。例如,查看Apache HTTP Server和Tomcat的源代码,可以学习如何处理HTTP请求、管理连接器以及实现Servlet容器。 ...

    基于JavaEE采用SSM框架实现的图书管理系统源码+项目说明(图片采用异步上传)(tomcat8.5版本).zip

    基于JavaEE采用SSM框架实现的图书管理系统源码+项目说明(图片采用异步上传,Java后端通过解析json进行接收。可以把借书信息导出为xls格式进行保存)(tomcat需要为8.5版本,9.0会导致js文件在浏览器显示乱码).zip

    JSP个人博客源码 Tomcat + SQL Server2000

    【JSP个人博客源码 Tomcat + SQL Server2000】是一个基于Java服务器页面(JSP)技术构建的个人博客系统,它...通过学习和理解这个源码,开发者可以提升在Web开发领域的技能,了解如何创建一个功能完备的个人博客系统。

    制造业MES项目源码,eclipse上可以直接导入有借鉴价值。配置tomcat7/8可以运行。

    此外,压缩包中的"1586951907591.png"可能是项目的一些截图或者流程图,这些图片资料能直观地展示系统界面或工作流程,对理解源码和系统功能有着辅助作用。 总结而言,这个制造业MES项目源码提供了一个宝贵的参考和...

    Tomcat-4(Tom猫)

    在本压缩包中,很可能是包含了与Tomcat 4相关的配置文件、文档、示例应用或者其他资源,对于想要学习或使用Tomcat 4的开发者来说是很有帮助的。 【描述】提到"想做Tom猫的小伙伴们,这个也许会帮到你",这里"Tom猫...

    【源码+数据库】基于JavaWeb+mysql+jsp+tomcat实现的在线售票系统分前后台

    本项目是一套基于javaWeb+mysql+jsp在线售票系统分前后台,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过...

    Tomcat 5.0.18 ClassLoader source code insight

    Tomcat作为一个流行的开源Java应用服务器,其内部机制的解析对于Java开发者而言具有重要的学习价值。在Tomcat的运行过程中,ClassLoader扮演着核心角色,它负责加载应用程序所需的类。在Tomcat 5.0.18版本中,对...

    javatomcat源码-java_war_example:为Tomcat生成WAR文件的示例源代码

    【标题】"javatomcat源码-java_war_example"是一个关于如何为Apache Tomcat服务器创建WAR(Web Application Archive)文件的示例源代码项目。在Java Web开发中,WAR文件是一种标准格式,用于打包和部署所有的Web应用...

    JSP源码——[图片动画]ttcodes JSP图片小偷 v1.0_jsp_tupian.zip

    《JSP源码——ttcodes JSP图片小偷 v1.0》 在Web开发领域,JSP(JavaServer Pages)是一种广泛使用的动态网页技术,它允许开发者将Java代码嵌入到HTML页面中,实现服务器端的数据处理和逻辑控制。本资源——...

Global site tag (gtag.js) - Google Analytics