`
chinese.darren
  • 浏览: 100796 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Tomcat源码分析——架构

阅读更多
下面谈谈我对Tomcat架构的理解

总体架构:

•面向组件架构
•基于JMX
•事件侦听
1)面向组件架构

tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成,如Server、Service、Connector等,并基于JMX管理这些组件,另外实现以上接口的组件也实现了代表生存期的接口Lifecycle,使其组件履行固定的生存期,在其整个生存期的过程中通过事件侦听LifecycleEvent实现扩展。Tomcat的核心类图如下所示:



Catalina:与开始/关闭shell脚本交互的主类,因此如果要研究启动和关闭的过程,就从这个类开始看起。

Server:是整个Tomcat组件的容器,包含一个或多个Service。

Service:Service是包含Connector和Container的集合,Service用适当的Connector接收用户的请求,再发给相应的Container来处理。

Connector:实现某一协议的连接器,如默认的有实现HTTP、HTTPS、AJP协议的。

Container:可以理解为处理某类型请求的容器,处理的方式一般为把处理请求的处理器包装为Valve对象,并按一定顺序放入类型为Pipeline的管道里。Container有多种子类型:Engine、Host、Context和Wrapper,这几种子类型Container依次包含,处理不同粒度的请求。另外Container里包含一些基础服务,如Loader、Manager和Realm。

Engine:Engine包含Host和Context,接到请求后仍给相应的Host在相应的Context里处理。

Host:就是我们所理解的虚拟主机。

Context:就是我们所部属的具体Web应用的上下文,每个请求都在是相应的上下文里处理的。

Wrapper:Wrapper是针对每个Servlet的Container,每个Servlet都有相应的Wrapper来管理。

可以看出Server、Service、Connector、Container、Engine、Host、Context和Wrapper这些核心组件的作用范围是逐层递减,并逐层包含。

下面就是些被Container所用的基础组件:

Loader:是被Container用来载入各种所需的Class。

Manager:是被Container用来管理Session池。

Realm:是用来处理安全里授权与认证。

分析完核心类后,再看看Tomcat启动的过程,Tomcat启动的时序图如下所示:

 

从上图可以看出,Tomcat启动分为init和start两个过程,核心组件都实现了Lifecycle接口,都需实现start方法,因此在start过程中就是从Server开始逐层调用子组件的start过程。

2)基于JMX

Tomcat会为每个组件进行注册过程,通过Registry管理起来,而Registry是基于JMX来实现的,因此在看组件的init和start过程实际上就是初始化MBean和触发MBean的start方法,会大量看到形如:

Registry.getRegistry(null, null).invoke(mbeans, "init", false);

Registry.getRegistry(null, null).invoke(mbeans, "start", false);

这样的代码,这实际上就是通过JMX管理各种组件的行为和生命期。

3)事件侦听

各个组件在其生命期中会有各种各样行为,而这些行为都有触发相应的事件,Tomcat就是通过侦听这些时间达到对这些行为进行扩展的目的。在看组件的init和start过程中会看到大量如:

lifecycle.fireLifecycleEvent(AFTER_START_EVENT, null);这样的代码,这就是对某一类型事件的触发,如果你想在其中加入自己的行为,就只用注册相应类型的事件即可。

转自:http://blog.csdn.net/cutesource/article/details/5006062
分享到:
评论

相关推荐

    tomcat6源码分析

    《Tomcat6源码分析——深入理解Web服务器的运行机制》 Tomcat6作为Apache软件基金会的Jakarta项目的一部分,是一款广泛使用的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,为开发和部署...

    Tomcat源码分析1

    《Tomcat源码分析1——服务启动与架构详解》 Tomcat,作为一款广泛应用的开源Java Servlet容器,其内部架构和启动流程对于深入理解和优化Web应用程序至关重要。本文将重点解析Tomcat启动时的关键步骤和核心组件,...

    TOMCAT源码分析(启动框架).pdf

    ### TOMCAT源码分析——启动框架详解 #### 一、前言 TOMCAT作为一款广泛使用的开源Java Servlet容器,其内部实现复杂且强大。本文旨在深入剖析TOMCAT的启动框架及其整体架构,帮助读者更好地理解其工作原理。...

    how tomcat works——(5)容器

    五、容器与源码分析 了解了容器的基本概念后,对于开发者来说,阅读Tomcat的源码可以帮助更深入地理解容器的工作原理。Tomcat的源码组织清晰,通过跟踪ContainerBase、StandardEngine、StandardHost、...

    tomcat源码解析

    ### tomcat源码解析 #### 简介与概览 Tomcat作为一款开源的Servlet容器,被广泛应用于Java ...通过对Tomcat源码的深入分析,我们可以更好地理解它是如何工作的,以及如何利用其强大的功能来构建高效、稳定的Web应用。

    Tomcat服务器开发源码

    对于想要了解Tomcat内部工作原理、优化服务器性能或者进行自定义扩展的开发者来说,这样的源码分析是极具价值的。 【标签】"Tomcat"进一步强调了主题的焦点,Tomcat是Java Web开发中不可或缺的一部分,它是Java ...

    架构探险 从零开始写javaweb框架书上源码

    《架构探险:从零开始写JavaWeb框架》是一本深入探讨JavaWeb开发技术的书籍,其核心内容是通过源码分析来帮助读者理解并构建自己的Web框架。书中的源码提供了实际的编程实践,使读者能够亲身体验到JavaWeb框架的实现...

    JSP源码——[影音娱乐]彩森视频网络电台DQUS版_dqus.zip

    通过分析和研究这个JSP源码,开发者可以学习到如何构建一个完整的多媒体服务平台,包括后端数据处理、前端用户交互、多媒体流处理等多个方面。这不仅对提升JSP技能有帮助,也为其他类似项目的开发提供了参考和启示。

    毕设源码——办公用品采购申领系统

    "毕设源码——办公用品采购申领系统"是一个针对毕业设计项目的源代码,主要功能是管理办公用品的采购和申领流程。这个系统可能包含了一个完整的前后端架构,用于实现用户界面交互、数据处理以及后台管理等功能,旨在...

    JSP源码——水果系统.zip

    【JSP源码——水果系统】是一个基于JavaServer Pages(JSP)技术开发的系统,主要目的是用于理解和学习JSP在实际项目中的应用。JSP是Java平台上的动态网页技术,它允许开发者将HTML或者XML标记语言与Java代码混合...

    JSP源码——[信息办公]iCan网络秘书_ican.zip

    源码分析可以帮助我们深入理解JSP的工作原理以及如何利用它来构建高效的信息管理系统。 1. **JSP基本结构** JSP文件由HTML或XML标签、Java代码片段、JSP指令和脚本元素组成。在"ICan网络秘书"中,这些元素可能被...

    JSP源码——[信息办公]双鱼林jsp人事工资系统_wagesmanagesystem.zip

    【JSP源码详解——构建人事工资管理系统】 在IT行业中,Java Server Pages(JSP)是一种广泛用于开发动态web应用程序的技术。"双鱼林jsp人事工资系统_wagesmanagesystem.zip"是一个基于JSP的源码项目,专为信息办公...

    JSP源码——[新闻文章]永恒文章管理系统(YHCMS) v2.0 源码版_yhcms_v20_src.zip

    【JSP源码详解——永恒文章管理系统YHCMS v2.0】 JSP(JavaServer Pages)是一种基于Java技术的动态网页开发技术,它允许开发者将静态HTML与动态Java代码结合,以创建交互式Web应用。永恒文章管理系统YHCMS v2.0是...

    JSP源码——MeyboMail Web(Java)开源简化_meybomailweb.zip

    源码分析可以帮助开发者理解如何在Java环境中实现这些安全措施。 **性能优化** 高性能的邮件系统需要处理大量的并发请求。MeyboMail Web可能利用了线程池、缓存技术等手段来提升性能。开发者可以从源码中学习如何...

    JSP源码——学生成绩管理系统(SSH+MYSQL).zip

    【标题】"JSP源码——学生成绩管理系统(SSH+MYSQL)" 提供的是一个基于Java Web技术的学生成绩管理系统的完整源代码,其中采用了经典的SSH(Struts2、Hibernate、Spring)框架和MySQL数据库。这个系统可以用于教学、...

    JSP源码——[信息办公]Asp.net通用OA系统_uds.zip

    【JSP源码详解——构建信息办公OA系统】 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者将HTML代码与Java代码结合在一起,从而在服务器端生成动态内容。在【信息办公】Asp.net通用OA系统_uds.zip这个...

    How Tomcat Work.pdf

    《How Tomcat Works》是一本专门讲解Tomcat内部工作机制的书籍,对广大Java开发者,尤其是对Tomcat源码和servlet容器工作原理感兴趣的开发者来说,这本书能够帮助他们深入了解Tomcat的架构以及如何进行自定义和优化...

    tomcat-connectors-1.2.48-src

    《深入理解Tomcat连接器:剖析tomcat-connectors-1.2.48-src源码》 ...通过源码分析,我们可以学习到更多关于网络请求处理、服务器通信以及性能优化的实践知识,这对于提升Web应用的效率和稳定性至关重要。

    JSP源码——图书管理系统(java+mssql).zip

    《JSP源码——图书管理系统(java+mssql)》是一个基于Java技术与Microsoft SQL Server数据库的Web应用程序,旨在实现对图书信息的高效管理。这个系统涵盖了图书的增删改查、用户管理、借阅与归还等功能,是学习JSP...

Global site tag (gtag.js) - Google Analytics