How tomcat works——引言


代码和UML图:https://github.com/Aresyi/HowTomcatWorks
排版更好的百度电子书:https://yuedu.baidu.com/ebook/ac92f0d35122aaea998fcc22bcd126fff7055d60


概述

欢迎阅读《How Tomcat Works》。这本书详细的剖析了Tomcat 4.1和5.0工作原理,并讲解了其代号为“Catalina” 当前免费、开源、最流行的servlet容器的内部运作机制。Tomcat是个复杂的系统,它是由许多不同的组件(Component)组成。那些想了解Tomcat工作原理的童鞋们往往很纳闷:我应该从哪里开始呢(O(∩_∩)O哈哈~狗咬刺猬——无处下牙)?别急,有了此《葵花宝典》保你无需自宫便知如何咬下Tomcat。这本书首先描绘了Web Server工作原理的大画面,然后一个个建立每个组件的微版本(组件原型),以此让童鞋们更容易的学习了解每个组件(分解动作)。最后,再将真正的组成部件组合起来予以解释。

你应该先阅读这个介绍,因为它说明了这本书的结构。并且向我们简述了如何构建应用程序。“准备必备软件“一节告诉我们:需要下载哪些软件,如何构建自己的代码目录结构等。

本书适合哪些读者

本书适合任何一位java技术工作者。

  1. 如果你是位servlet/JSP程序员,或是位Tomcat使用者,并且对“Servlet容器是如何工作”的有着浓厚的兴趣,那么本书正是为你准备的。
  2. 如果你想加入Tomcat的开发团队,那么你得先学习这些已经存在的代码。
  3. 如果你未曾参与过web开发,但是你对一般的软件开发有兴趣,那么你可以从本书学习如何去设计和开发诸如Tomcat这样的大型应用程序。
  4. 如果你需要配置或是定制Tomcat,那么你应该阅读此书。

要理解本书的内容,首先需要你对java面向对象编程以及Servlet开发有所学习理解。如果你不熟悉后者,这里有大量的书籍供你学习参考(If you are not familiar with the latter, there are a plethora of books on sendets, including Budi’s Java for the Web with Servlets, JSP, and EJB.)为了方便更容易理解,每章均以即将要讨论的主题内容的背景资料信息开始。

Servlet容器是如何工作的

Servlet容器是个复杂系统。然而,对于一个Servlet容器来说,处理一Servlet请求,也就基本上三件事而已:

  1. 创建一个请求对象,并给它填充一些可能被发起调用的Servlet使用到信息,比如:参数、头信息、查询字符、URI等。一个请求对象是javax.servlet.ServletRequest 接口或javax.servlet.http.ServletRequest接口的实例对象。
  2. 创建一个应答对象,发起调用的Servlet通过它发送(服务器)响应信息给web客户端。一个应答对象是javax.servlet.ServletResponse接口或javax.servlet.http.ServletResponse接口的实例对象。
  3. 调用Servlet的service方法,传递请求和响应对象。这里,Servlet读取请求对象的信息,并且向应答对象中写入响应信息。

伴随着你阅读每个章节,你将会发现Catalina Servlet容器的详细细节讨论。

Catalina结构图

Catalina是软件中相当复杂而精美的一块,源于它优雅的设计和开发。它也是模块化的。在“一个Servlet容器如何工作的“章节中,你会发现构成Catalina的二个核心模块:connector和container。
这里写图片描述
图一

图1中结构图,当然还是相当简单的。在后续的章节中,你将会逐步一点一点的学习到所有的“零部件”(Later in the following chapters you will unveil all smaller components one by one)。

现在,我们回到图1,这里的连接器(connector)链接了一个请求(request)和容器(container)。连接器的工作是为它收到的请求创建一个request对象和response对象。然后传递给container。Container从连接器那里接收request和response对象,并且负责调用Servlet的service方法。

但是要知道(Bear in mind though),刚才上面的描述只是冰山一角。有许多事情需要container处理的。比如:在它调用servlet的service方法之前,它必须加载servlet,判断这个请求用户是否有权限(如果需要的话),更新session等等。因此,也没什么好惊讶的了:一个Container使用那么多不同模块来处理工作。比如:“Mananger”模块负责处理用户Session,“Loader”模块负责加载servlet,等等。

Tomcat 4和5

这本书,涵盖了Tomcat4和Tomcat5。这2个版本之间有些不同之处:

  1. Tomcat5支持Servlet2.4和Jsp2.0规范,Tomcat4支持Servlet2.3和Jsp1.2规范。
  2. Tomcat5的默认连接器(connector)比Tomcat4更高效。
  3. Tomcat5共享了一后台线程替代了Tomcat4中的每一组件都使用自己后台线程的做法。所以,在这点上,Tomcat5使用了更少的资源。
  4. Tomcat5不在需要映射组件去寻找子组件,因此简化了编码(Tomcat 5 does not need a mapper component to find a child component, therefore simplifying the code.)。

每章概述

本书共20章。前2章作为一个简介。第一章解释了“Http Server”是如何工作的;第二章描绘了一简单的Servlet容器。接下来二章重点放在“Connector”连接器上,第5章~第20章涵盖了容器中每一个组件。如下是每章的简介。

注意,伴随着每章被介绍的组件,都会有一相似此组件应用的Demo.

第1章:介绍了一个简单的“HTTP Server”。构建一个“HTTP Server”,你需要知道java.net package中的两个类:Socket 和ServerSocket的内部工作机制。这里有足够多的关于这两个类的背景资料供你去理解本章的Demo应用。

第2章:阐述了一个简单的Servlet容器是如何工作的。本章开始介绍了两个简单的Servlet容器应用,它能够很好的为一个简单的servlet请求处理静态资源。特别,你将学到怎样创建request和response对象,并把它们传递给请求的Servlet的service()方法。这里的servlet能够在servlet容器中运行,并且你可以通过web浏览器访问(调用)它。

第3章:介绍了Tomcat4中默认连接器的简易版本。本章编写的应用Demo将作为理解第四章中讨论的连接器的工具。

第4章:介绍了Tomcat4中的默认连接器。这个连接器已不再推荐使用,一个更高效更受喜欢的叫做“Coyote”连接器取代了它。尽管如此,默认连接器还是比较简单容易被理解的。

第5章:讨论了“container”模块。容器是通过org.apache.catalina.Container接口抽象的。这里有4种类型容器:engine、host、 context和 wrapper。本章提供的2个应用Demo用到了contexts 和wrappers。

第6章:讲解“生命周期(Lifecycle)”接口。此接口定义了Catalina组件生命周期,并且提供了简练的方式通知其他相关组件——当事件发生时。另外Lifecycle接口还提供一优美机制:通过一个star/stop来启动和停止Catalina中的所有组件。

第7章:涉及到Loggers,此组件用来记录错误信息和其他信息。

第8章:讲解了Loader相关。Loader是Catalina中重要的模块,它负责加载Servlet和web应用中的class。本章也介绍了如何高效完美地重载应用。

第9章:讨论Manager组件,此组件管理用户Session。介绍了各种各样的Manager,一个manager怎样持久地存储session对象。在本章最后,你将学会怎样构建:使用StandardManager实例运行一个持有session对象存储值的servlet的应用(uses a StandardManager instance to run a servlet that uses session objects to store values)。

第10章:涵盖 web 应用程序安全性限制,用来限制进入某些内容。你将会学习与安全相关的实体,例如主体(principals),角色(roles),登录配置,认证等等。你也将会写两个程序,它们在StandardContext 对象中安装一个身份验证阀并且使用了基本的认证来对用户进行认证。

第11章:讲解org.apache.catalina.core.StandardWrapper类在WEB应用中扮演着Servlet时的细节。尤其,本章还介绍了如何过滤和servlet的service()方法被调用。本章应用Demo应用StandardWrapper实例描绘Servlet。

第12章:讲解org.apache.catalina.core.StandardContext类,描绘一WEB应用。尤其,本章介绍了StandardContext对象如何配置,每当有HTTP请求时会发生什么、怎么样支持动态重新加载,Tomcat5如何分配一线程周期性地在它相关联组件间处理定时任务。

第13章:介绍了另二个容器:host和engine。你也会发现这二个容器的标准实现:org.apache.catalina.core.StandardHost和org.apache.catalina.core.StandardEngine。

第14章:介绍server和service二个组件。server为整个servlet容器提供一个优雅的启动/停止机制,service为一个container和一个或更多的connector服务。本章的应用Demo介绍了如何使用server和service。

第15章:讲解通过Digester配置一个WEB应用(Digester是Apache软件基金会的另一开源项目)。在正式讲解前(For those not initiated),本章通过一小节简要的介绍了Digester包和怎样使用它把XML文档的节点转化为Java对象。然后通过配置一StandardContext讲解了ContextConfig对象。

第16章:讲解shutdown钩子。Tomcat使用它清除资源,当用户停止Tomcat时(例如:用户通过发送正常的shutdown命令或不正常通过控制台关闭Tomcat)。

第17章:讲解了通过Bat、Shell脚本来启动和关闭Tomcat。

第18章:介绍Deployer组件。此组件负责部署和装载WEB应用。

第19章:讨论特殊接口——ContainerServlet,使servlet有权使用(access to)Catalina内部对象。特别,讨论了Manager应用——使用Manager部署应用。

第20章:讨论JMX和Tomcat如何为它的内部对象通过创建MBeans变为可易管理。

每章应用Demo

每章穿插的一个或多个应用Demo,致力于Catalina中一个具体的组件。通常你会发现通过解释和编码简易版本来介绍如何使用Catalina中一个个组件。每章中所有类和接口均位于ex[chapter number].pyrmont包或子包中。例如:第一章应用Demo位于ex01.pyrmont包。

准备必备软件

本书中应用Demo运行在J2SE1.4上。压缩的的原文件可以通过作者网站www.brainysoftware.com 来下载。它包含Tomcat 4.1.12的源码和本书中应用Demo。如果你已经安装了J2SE 1.4和配置了JDK环境变量,现在如下操作:

  1. 解压缩zip文件。新解压出的文件将会位于HowTomcatWorks目录下。HowTomcatWorks是你的工作目录路径。HowTomcatWorks下有几个子目录,包括lib(包含包文件),src(包含源文件),webroot(包含HTML文件和三个servlet例子),webapps(包含应用例子)。
  2. 切换到工作目录,并编译java文件。如果你使用的是windows系统,请执行win-compile.bat文件。如果你的电脑是Linux机器,请操作:(不要忘记赋予权限,如果需要的话)./linux-compile.sh

阅读压缩文件中的Readme.txt文件将会发现更多信息。


代码和UML图:https://github.com/Aresyi/HowTomcatWorks
排版更好的百度电子书https://yuedu.baidu.com/ebook/ac92f0d35122aaea998fcc22bcd126fff7055d60


猜你喜欢

转载自blog.csdn.net/LoveJavaYDJ/article/details/54016526