论坛首页 Java企业应用论坛

[How Tomcat Works]第0章 介绍

浏览 3739 次
精华帖 (0) :: 良好帖 (10) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-02-24   最后修改:2010-03-23

译者 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 中,Container org.apache.catalina.Container 接口表示,并且有4种类型的Container Engine Host Context Wrapper 。本章提供了两个应用程序,涉及到 Context Warpper

    第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 。特别是,本章还解释了FilterServlet service 方 法是如何被调用到的。此外,本章附带的应用程序将使用 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 对 象。之后,本章描述了负责配置 StandardContext ContextConfig

    第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 ) 下载。

   发表时间:2010-03-22  
Servlet 实现没有什么很难的地方,主要是Jasper部分。
0 请登录后投票
   发表时间:2010-03-22  
翻译完了??
能否给个完整版给我。。谢谢,我只看完前8章。。
你上面的连接不能看到。不知道为什么
0 请登录后投票
   发表时间:2010-03-23  
zhxing 写道
翻译完了??
能否给个完整版给我。。谢谢,我只看完前8章。。
你上面的连接不能看到。不知道为什么


抱歉,还没翻译完。正在翻译中,其实英文版也比较容易读。
0 请登录后投票
   发表时间:2010-04-02  
这本书我也看过,挺不错,涉及的知识挺多
0 请登录后投票
   发表时间:2010-10-20  
感谢代码 找了好一会儿
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics