`
ss1
  • 浏览: 80431 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《How Tomcat Works》读书笔记(四):容器初探

阅读更多

第四章:容器初探

接触JAVA EE以来,最初对“容器”一词满头雾水、无比崇拜,后来听到耳朵长茧,一直觉得这个词的定义有点太广了,很多情况下不管沾没沾点关系的都往上靠,力图通过 此术语使自己显得“专业”一些(老实说我写文档也这么做过)。但不论如何,发明这个计算机术语的人还是相当牛的,充分体现了JAVA EE“分层”的思想。

唯一不爽的是,一直以来都处于“容器”的黑盒之外,更加上那些大厂商对自己的JAVA EE“容器”产品的神乎其神的吹嘘宣传,一直没法想象外国那些鬼佬怎么就这么牛能做出这么厉害的东西,我们只有乖乖使用的份?还好有开源,还好有这本 《How Tomcat Works》,可以满足我的好奇心,一窥“容器”的奥秘

Tomcat的容器架构

我们一般都把tomcat、weblogic、websphere app server和JBOSS AS称为“J2EE容器”,是一种广义的说法;而这里的“容器”,指的是tomcat中的两大组件之一的“容器”,属于狭义的说法(另一种组件当然就是 Connector了)。

tomcat的容器架构,一直都没有太大变化,基本元素都是四个接口:

  • engine:表示一整个Catalina Servlet引擎
  • host:表示一个虚拟主机。什么是虚拟主机可以百度一下“tomcat 虚拟主机配置”
  • Context:表示一个web app应用,比如你做的一个网站
  • Wrapper:表示单个Servlet

以上四个基本元素由上至下逐渐细分,成树状结构,构成了tomcat容器结构的主体,它们都位于org.apache.catalina包

值得一提的是,这四个接口并不是同时必须的,例如,你完全可以做一个只有Wrapper的“迷你版”tomcat,这在一些资源受限的环境中,比如嵌入式系统很有用(说不定将来能放到手机里面跑,O(∩_∩)O哈哈~)

类图如下:

image

一般来说,容器里头都还有session管理、日志等功能,不过这一章暂时还不作讨论。

PipeLine & Valve

熟悉Servlet的人一定接触过Servlet filter,在Servlet处理请求之前,先会由filter“过滤”一下。tomcat内部同样也有类似的东西,那就是Valve——阀门。而所有 的Valve都是装在一个pipeline(管道)里头的,tomcat的开发者估计对水管工之类的活比较感兴趣。这些Valve的功能各异,你也可以自 己开发然后放到tomcat的配置文件里面。

那具体是如何工作的呢?首先 ,Connector调用容器的invoke方法,把Request给容器,容器再把Request对象给自身的pipeline:

public void invoke(Request request, Response response)
   throws IOException, ServletException {
   pipeline.invoke(request, response);

   ...
}

然后 ,在pipeline内部有个内部类ValveContext,它来管理所有的Valve。pipeline一般会调用ValveContext的invokeNext

public void invokeNext(Request request, Response response)

ValveContext又调用第N个Valve的invoke方法(N是一个计数器,记录调用到第几个Valve了),不过参数稍微有点不同

public void invoke(Request request, Response response,
   ValveContext ValveContext ) throws IOException, ServletException

它把自己作为参数传了进去给Valve,有什么用呢?其实很简单,看看Valve的invoke是怎么实现的

public void invoke(Request request, Response response,
   ValveContext valveContext) throws IOException, ServletException {
   // Pass the request and response on to the next valve in our pipeline
   valveContext.invokeNext(request, response);
   // now perform what this valve is supposed to do
     ...
}

秘密就在这里!Valve又回调 了ValveContext的invokeNext,这样就相当于递归一样,把全部Valve都调用一遍。

仔细推敲会发现,每个Valve都是先调用ValveContext的invokeNext,然后才做自己的工作,所以“第一个”被 pipeline调用的Valve,实际却是最后一个完成自己工作的,有点类似“压栈”操作,第一个Valve最先被压进去,却是最后一个从堆栈中弹出来 的。如果不信,可以做个试验,眼见为实。

修改BasicValve

每个pipeline默认会有一个basicvalve,做一些基本工作,比如把Request传递给下一级子容器,或者把Request交给 Servlet(Wrapper的basicvalve就是做这个的)。从pipeline的源码来看(书中的源码,未必是tomcat的源 码),basicvalve是最后一个被调用的。

if (subscript < valves.length) {        valves[subscript].invoke(request, response, this);
     }
     else if ((subscript == valves.length) && (basic != null)) {
       basic.invoke(request, response, this);
     }

以上是ValveContext.invokeNext方法的一部分,basic就是指BasicValve,很明显是最后一个被加进去的。

我们在basicvalve的invoke方法第一行增加一个简单的输出,运行之后就会发现,basicvalve的输出在其他Valve的前面,可见上面的推断是正确的!

关于Wrapper的疑问

这一章最后是两个简单的程序:第一个只有Wrapper容器,另一个则由两个Wrapper包含在一个Context容器里组成。Wrapper和 Context接口就不啰嗦了,在后续章节有专门的详细解说。但在这里,每个Wrapper对应一个Servlet,如果是个大项目,那里面的 Servlet起码有几十个,很难想像有那么多的Wrapper在同时跑,会不会导致性能低下呢?也许要看完这本书才能找到答案了

keep moving,坚持每周看一章~!

分享到:
评论

相关推荐

    how tomcat works——(5)容器

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

    How Tomcat Works 中文版.pdf

    通过阅读《How Tomcat Works》中文版,读者将能够获得对Tomcat架构的全面理解,学习到如何从源码级别研究和开发一个高性能的Java应用服务器,以及如何将其应用于实际的Web开发和服务器管理工作中。

    How Tomcat Works 读书笔记(第三章)

    《How Tomcat Works》这本书是理解Apache Tomcat服务器工作原理的重要资源,第三章主要探讨了Tomcat的架构和核心组件。以下是对这部分内容的详细解读: Tomcat作为一款开源的Java Servlet容器,其核心功能是解析...

    How Tomcat Works【英文PDF+中文HTML+源码】.zip

    6. **安全性**:Tomcat提供了多种安全措施,包括SSL/TLS加密、角色基础的访问控制(RBAC)、容器管理的身份验证和授权,以及通过`tomcat-users.xml`配置用户和角色。 7. **集群与负载均衡**:Tomcat支持集群配置,...

    How Tomcat Works 中文版+例程源码

    《How Tomcat Works》是一本深入探讨Apache Tomcat工作原理的书籍,中文版的提供使得国内开发者能够更方便地理解这一流行的开源Java Servlet容器。这本书不仅涵盖了Tomcat的基础知识,还详细解析了其内部机制,对于...

    How Tomcat Works中文

    ### How Tomcat Works中文版深度解析 #### 一、引言与概述 《How Tomcat Works》是一本针对Apache Tomcat服务器内部工作机制进行深入剖析的专业书籍。本书详细介绍了Tomcat 4.1.12和5.0.18两个版本的内部结构与...

    How Tomcat Works 英文书及源码

    《How Tomcat Works》这本书是理解Apache Tomcat服务器工作原理的宝贵资源,它全面深入地讲解了这个流行的Java Servlet和JavaServer Pages(JSP)容器的内部机制。书中的20个章节涵盖了从基础概念到高级特性的广泛...

    How Tomcat Works 中文版

    《How Tomcat Works中文版》这本书是一本深入探讨Apache Tomcat服务器工作原理的专著。Apache Tomcat服务器,或简称为Tomcat,是世界上广泛使用的Java Servlet容器和JavaServer Pages(JSP)引擎,负责处理基于Java...

    How Tomcat works(PDF)

    《How Tomcat Works》这本书深入浅出地介绍了Apache Tomcat这款广泛应用的Java Servlet容器的工作原理。Tomcat作为开源软件,是许多Web应用的基础,尤其在轻量级开发和测试环境中非常常见。以下是对Tomcat核心知识点...

    HowTomcatWorks 中文版+源码.rar

    《HowTomcatWorks》是一本深入解析Apache Tomcat工作原理的书籍,中文版的发布使得更多的中国开发者能够理解和掌握这款广泛应用的开源Java Servlet容器的工作机制。Tomcat是Apache软件基金会Jakarta项目的一部分,它...

    HowTomcatWorks书籍代码

    HowTomcatWorks书籍课程实例工程与代码 书籍剖析了Tomcat 4.1.12和Tomcat 5.0.18--一个免费的、开源的、深受大众欢迎的、代号为Catalina的servlet容器,并讲解其容器的内部运行机制。通过迭代实现一个简化版软件来...

    how tomcat works

    《How Tomcat Works》这本书详细解释了Tomcat的工作原理,它不仅为新手提供了一个蓝图,帮助他们理解这个复杂的系统,也为有经验的开发者提供了深入学习的机会。 ### Tomcat的基本概念 Tomcat核心分为两个主要模块...

    HowTomcatWorks(书和源码)

    6. **连接器与容器**:Tomcat中的连接器负责监听和接收来自网络的连接,将请求转换为内部对象,然后传递给容器。容器则是管理Servlet和JSP实例的地方,包括Servlet的生命周期管理、会话管理和错误处理等。 7. **...

    how tomcat works中英文版

    《How Tomcat Works》是一本深入探讨Apache Tomcat工作原理的书籍,包含了中英文两个版本。这本书对于理解Java Servlet和JavaServer Pages(JSP)容器的运作方式具有极高的价值,特别是对于那些想要深入理解Web应用...

Global site tag (gtag.js) - Google Analytics