[How Tomcat Works]第0章 介绍

译者 jarfield

博客 http://jarfield.iteye.com

  1. 概述
  2. 本书为谁准备
  3. Servlet 容器如何工作
  4. Catalina 的框图
  5. Tomcat 45
  6. 每章的概述
  7. 每章的应用程序
  8. 准备必要的软件

概述

    欢迎来到 Tomcat 的内部世界。这本书剖析了Tomcat 4.1.125.0.18 , 并讲解了Tomcat Servlet 容器(代号为Catalina )的工作内幕。Catalina 是免费的、开源的,也是最流行的Servlet 容器。Tomcat 是一 个复杂的系统,它包括了众多的组件。在了解Tomcat 如何工作之前,我们应 该知道从哪儿入手。这本书首先绘制了一张大蓝图,然后构建了Tomcat 各个 组件的简化版本,使得读者更容易理解Tomcat 组件。在这之后,我才会讲解Tomcat 组件的真实版。

     你应该首 先阅读这一章,因为本章描述了本书的结构,并简单介绍了本书将构建的应用程序。“准备必要的软件”这一节给出了需要下载的软件、应用程序代码的目录结构, 等等。

本书为谁准备

    从事Java 技术的任何人都可以阅读本书。

  • 如果你是Servlet/JSP 程序员或Tomcat 用户,而且对Servlet 容 器工作内幕很感兴趣,那么本书为你而准备。
  • 如果你想加入Tomcat 开 发团队,那么本书为你而准备。因为你首秀安需要学习已有的Tomcat 代码是 如何工作的。
  • 如果你从没参加过Web 应用的开发,但是对软 件开发很有兴趣,那么你可以从本书学习到“如何设计和开发像Tomcat 这样 的大型应用”。
  • 如果你需要配置和定制Tomcat ,你应该 读读本书。

   
   为了更好地理解本书的内容,你需要理解Java面向对象程序设计和Servlet编 程。如果你不熟悉后者,也没关系,有很多书可以参考,比如 Budi Kurniawan 的《Java for the Web with Servlets, JSP, and EJB》。为了便于理解,每一章的开始都介绍了必要的背景知识。

Servlet 容器如何工作

    Servlet 容 器是一个复杂的系统。但是从最基本的功能(处理一个到Servlet 的请求) 来看,Servlet 容器主要完成3件任务:

  • 创建Request 对 象,并填入Servlet 可能用到的信息,例如请求参数、headerscookiesquery stringURI 等。Request 对象是javax.servlet.ServletRequestjavax.servlet.http.HttpServletRequest 接口的实例。
  • 创 建Response 对象,Servlet 使 用该对象向客户端发送响应数据。Response 对象是javax.servlet.ServletResponsejavax.servlet.http.HttpServletResponse 接口的实例。
  • Request 对象和Response 作 为参数,调用Servletservice 方 法。Servlet 会从Request 对 象中读取请求数据,并将响应数据写入到Response 对象中。


    当你阅读本书的其他章节时,将会找到关于Catalina 的 详细讨论。

Catalina 的框图

    Catalina 是一款设计优雅的、非常成熟的软件。同时,她也是一款模块化的软件。基于“Servlet 容 器如何工作”一节中提到的那3 件任务,你可以认为Catalina 由两个主要模块组成:ConnectorContainer

           Figure 0.1 Catalina 的主要模块
   
    Figure 0.1 是一个非常简化的、高 度概括的框图,后续章节将陆续提到粒度更小的组件。

    现在,我们回到Figure 0.1Connector 将一个请求和Container 连接起来。Connector 的 职责是接收HTTP 请求,并为每个请求创建一个Request 对象和一个Response 对 象。ContainerConnector 那里接收到Request 对象和Response 对象,然后负责调用Servletservice 方法。

    不过请记住,这只是冰上一角。Container 其实干了很多很多事情。举个列子,在调用Servletservice 方 法前,Container 必须加载(loadServlet ,验证用户身 份(如果需要的话),更新用户的会话(Session ),等等。Container 使用了很多模块来处理这些事情。例如,Manager 模块负责处理用户会话,Loader 模块负责加载Servlet 类,等 等。

Tomcat 4和 5

    本书覆盖了Tomcat 45 。这里列出了两者的一些不同点:

  • Tomcat 5 支 持Servlet 2.4JSP 2.0 规范,Tocmat 4 支持Servlet 2.3JSP 1.2 规范。
  • Tomcat 5 使用了一个 更加高效的默认Connector
  • Tomcat 5 的所有组件共享一个后台处理线程,而Tomcat 4 的组件都拥有自己的后台处理线程。因此,Tomcat 5 节省了资源消耗。
  • Tomcat 5 查找子组件时不再使用Mapper 组件,因此代码更加简 化。

每章的概述

    本书共有20 章。 头两章是介绍。第1 章描述了HTTP服务器是如何工作的,第2 章主要阐述了一个简单的Servlet 容 器。接下来两章的焦点是Connection 。从第5章到第20章,每章分别 讲解了Catalina 的一个组件。下面是每章的摘要。
   
    提示:每一章都附带了一个与被讲解组件相关的应用程序。

    第1章 作为本书的开篇,介绍了一个简单的HTTP 服 务器。为了构建一个可以工作的HTTP 服务器,你必须了解java.net 包:SocketServerSocket 。因此,本章包括了这俩类的一些背景知识,足够让你理解本章附带的应用 程序的工作原理。

    第2章 阐述了一个简单的Servlet 容器 是如何工作的。本章带了两个Servlet 容器应用程序,它们分别处理对静态 资源和简单Serlvet 的请求。特别是,你会学习到如何创建RequestResponse 对 象,如何将它们传递给Servletservice 方法。另外,应用程序还包括了一个能够运行在Servlet 容 器中的servlet ,你可以从浏览器中调用它。

    第3章 介绍了Tomcat 4 默 认Connector 的一个简化版。本章构建的应用程序可以作为一个学习工 具,方便理解 第4章讨论的Connector

    第4章 介绍了Tocmat 4 的 默认Connector 。现在,该Connector 已经被一个更快的ConnectorCoyote )取代了。无论如何,这个过时的Connector 简单易学。

    第5章 讨论了Container 模 块。在Catalina 中,Containerorg.apache.catalina.Container 接口表示,并且有4种类型的ContainerEngineHostContextWrapper 。本章提供了两个应用程序,涉及到 ContextWarpper

    第6章 解释了生命周期(Lifecycle ) 接口。该接口定义了Catalina 组件的生命周期,并提供了一种优雅的方 式,将生命周期事件(Event )通知给其他组件。此外,生命周期接口还提供 了一种优雅的机制,只需调用一次 start / stop 方法,就可以启动或停止Catalina 的 所有组件。

    第7章 介绍了Logger 模 块,其他组件都使用它来打印错误日志和其他日志。

    第8章 解释了LoaderLoader 是一个重要的Catalina 模 块,负责加载Servet 类和Web 应用使用的其他 类。本章 还展示了如何重新部署(reload )Web应用。

    第9章 讨论了Manager 。 该组件负责管理用户会话。本章解释了不同类型的Manager ,以及Manager 如何持久化会话对象。在本章的最后,我们将构建一个支持Servlet 使用会话对象来存储数据的应用程序,该应用使用 StandardManager 来实现该功能。

    第10章 介绍了Web 应 用限制特定资源访问的安全约束(Security Constraints )。 你将会学习到安全相关的各种实体(Entity ),包括PrincipalRoleLogin ConfigAuthenticator 等 等。我们还构建了两个应用程序,在 StandardContext 对象中安装一个Authenticator Valve ,使用基本验证方式( Basic Authentication )来验证用户身份。
 
    第11章 详细解释了 org.apache.catalina.core.StandardWrapper 类,该类代表了Web 应 用中的Servlet 。特别是,本章还解释了FilterServletservice 方 法是如何被调用到的。此外,本章附带的应用程序将使用 StandardWrapper 来表示Servlet

    第12章 介绍了 org.apache.catalina.core.StandardContext 类,该类代表了Web 应 用。特别是,本章还讨论了 StandardContext 对象如何被配置的,HTTP 请 求进来时 StandardContext 内部发生了什么, StandardContext 如何支持自动重新部署的,Tomcat 5 如何在各组件之间共享一个执行周期性任务的线程。

    第13章 介绍了其它两种ContainerHostEngine 。 你可以找到这两种Container 的标准实现: org.apache.catalina.core.StandardHost 类和 org.apache.catalina.core.StandardEngine 类。

    第14章 描述了ServerService 两个组件。Server 为 整个Servlet 容器提供了一种优雅的启动和停止机制,Service 则是一个Container 和 数个Connector 的持有者(holder )。本章的应用程序展示了如何使用ServerService

    第15章 解释了基于DigesterWeb 应用配置机制。Digester 是 一个令人振奋的、Apache 基金会的开源项目。本章专门开辟一节介绍了digester 库,并描述了如何使用digesterXML 文档中的节点(Node )转换成Java 对 象。之后,本章描述了负责配置 StandardContextContextConfig

    第16章 解释了shutdown hook 。使用了该hook 之后,无论用户怎么停止Tomcat (比如,恰当地发送shutdown 命令,或不恰当地直接关闭控制台),Tomcat 总 有机会做一些清理工作。

    第17章 讨论了Tocmat 的 启动和停止过程(使用batch 文件或shell 脚本)。

    第18章 介绍了Deployer , 该组件负责部署(deploy )和安装(installWeb 应用。

    第19章 讨论了一个特殊的接口: ContainerServlet 。该接口赋予了Servlet 访问Catalina 内 部对象的能力。特别是,本章讨论了可以管理已部署应用(deployed applications )的Manager 应用(Manager application )。

    第20章 讨论了JMXTomcat 为内部对象创建MBean , 使得它们可管理(manageable ),本章将解释Tocmat 是怎么做的。

每章 的应用程序

    每章都附带了一个或多个应用程序,每个应用程序都关注一个特定的Catalina 组 件。通常,应用程序会提供所关注组件的简化版本,并通过代码演示如何使用该组件。应用程序的所有类和接口都在ex[章节编号].pyrmont 包及其子包中。例如, 第1 章的应用程序类就在ex01.pyrmont 包中。

准备必要的软件

    本书附带的应用程序要求J2SE 1.4 。 源代码文件(zip )可以从作者的网站 www.brainysoftware.com 下载。该zip 文 件包含了Tomcat 4.1.12 和本书应用程序的源代码。本书假设你已经 安装了J2SE 1.4 ,环境变量path 中包含了JDK 的路径,然后按下面步骤操 作:

  1. 解压zip 文件。解压后所有文件都在HowTomcatWorks 下。HowTomcatWorks 是工作目录,其下有几个子目录,包括lib (包括所有依赖的jar 文 件)、src (包括源代码文件)、webroot (包 含1HTML 文 件和3Servlet ) 和webapps (包含应用程序范例)。
  2. 切换到工作目录,编译Java 文件。如果你使用的是Windows ,执行win-compile.bat 文 件。如果是linux ,键入命令(不要忘了chmod ):./linux-compile.sh

 
    提示:更多信息,详见zip 文件 中的Readme.txt

    译者提示:作者官方网站上已经下载不到源代码文件,感兴 趣的读者可以从 这里( http://docs.google.com/leaf?id=0B-6ayGT6pnKtYzdlYWQzNDYtOGYxZS00YjJhLTk1MDQtZDZlYjBiYTBiODdm&hl=zh_CN ) 下载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值