`
hzbook
  • 浏览: 251745 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

深入剖析Tomcat(How Tomcat Works)

 
阅读更多

《深入剖析Tomcat》前言(作者:Budi Kurniawan & Paul Deck)

欢迎阅读本书。本书剖析了Tomcat 4.1.12版本和Tomcat 5.0.18版本的基本结构,并解释了其servlet容器Catalina的内部工作原理。Catalina是开源、免费的,也是最受欢迎的servlet容器之一。Tomcat本身是一个复杂的系统,包含了许多不同的组件。若你想学习Tomcat的工作方式,应该从了解这些组件开始。本书描述Tomcat的总体结构,并针对每个组件建立一个简单的版本,使你更好地理解组件的工作机制,之后对真实组件进行描述。

“本书结构”一节会对全书的章节设置做一个总体介绍,并说明构建的应用程序的总体结构。在“准备必需的软件”一节,说明需要下载使用哪些软件,如何为代码创建目录结构等。

本书读者对象

本书适合于所有使用Java技术工作的开发人员。

  • 如果你是一名JSP/Servlet程序员或Tomcat用户,并想了解servlet容器是如何工作的,那么本书很适合你;
  • 如果你想加入Tomcat开发团队,那么本书很适合你,因为你首先要学习已有的代码是如何工作的;
  • 如果你不是一名Web开发人员,但对软件开发很有兴趣,那么你可以从本书中学习到一个大型应用软件(如Tomcat)是如何设计和开发的;
  • 如果你想对Tomcat进行配置或定制,你应该阅读本书。

为了更好地理解本书所讲述的内容,你需要理解Java中的面向对象编程知识,以及Servlet编程方面的知识。如果你对后者还不熟悉,那么你学习起来可能会有些困难。你可以先学习一下Servlet编程方面的知识,例如看一下Budi的《Java for the Web with Servlets, JSP, and EJB》一书。为了使你更好地理解本书的内容,每一章的开头都会有一段与该章内容相关的背景信息的介绍。

servlet容器是如何工作的

servlet容器是一个复杂的系统,但是,它有3个基本任务,对每个请求,servlet容器会为其完成以下3个操作:

创建一个request对象,用可能会在调用的Servlet中使用到的信息填充该request对象,如参数、头、cookie、查询字符串、URI等。reqeust对象是javax.servlet.ServletRequest接口或javax.servlet.http.ServletRequest接口的一个实例。

创建一个调用Servlet的response对象,用来向Web客户端发送响应。 response对象是javax.servlet.ServletResponse接口或javax.servlet.http.ServletResponse接口的一个实例;

调用Servlet的service()方法,将request对象和response对象作为参数传入。Servlet从request对象中读取信息,并通过response对象发送响应信息。

当你阅读具体的章节时,你会看到关于servlet容器Catalina的详细描述。

Catalina框图

Catalina是一个成熟的软件,设计和开发得十分优雅,功能结构也是模块化的。上一节“servlet容器是如何工作的”中提到了servlet容器的任务,基于这些任务可以将Catalina划分为两个模块:连接器(connector)和容器(container)。

图I-1很简单,在后续的章节中,你会逐个接触到所有的组件。

图I-1 Catalina的主要模块

现在,回到图I-1,这里的连接器负责将一个请求与容器相关联。它的工作包括为它接收到的每个HTTP请求创建一个request对象和一个response对象。然后,它将处理过程交给容器。容器从连接器中接收到request对象和response对象,并负责调用相应的Servlet的service()方法。

但是请记住,上面所描述的处理过程只是Catalina容器处理请求的整个过程的一小部分,犹如冰山的一角,在容器中还包括很多其他的事情要做。例如,在容器调用相应的Servlet的service()方法之前,它必须先载入该Servlet类,对用户进行身份验证(如果有必要的话),为用户更新会话信息等。因此,当你发现容器使用了很多不同的模块来处理这些事情时,请不要太惊讶。例如,管理器模块用来处理用户会话信息,载入器模块用来载入所需的Servlet类等。

Tomcat 4和Tomcat 5

本书涵盖了Tomcat 4和Tomcat 5两个版本。下面是这两个版本的一些区别之处:

  • Tomcat 5支持Servlet 2.4和JSP 2.0规范,Tomcat 4支持Servlet 2.3和JSP 1.2规范;
  • Tomcat 5默认的连接器比Tomcat 4默认的连接器执行效率更高;
  • Tomcat 5使用共享线程来执行后台任务,而Tomcat 4的组件使用各自的线程执行后台任务,因此,相比于Tomcat 4,Tomcat 5更节省资源;
  • Tomcat 5不再使用映射器组件来查找子组件,因此,代码更简单。

本书结构

本书共20章,前两章概述了全书内容。第1章介绍了HTTP服务器是如何工作的,第2章介绍了一个简单的servlet容器。第3章和第4章着重于连接器的说明,第5~20章介绍容器中的各个组件。下面是每一章的内容简介。

注意 每一章都配有一个应用程序用于对该章所介绍组件进行实际应用的说明。

第1章:本书从介绍一个简单的HTTP服务器开始。为了建立一个可以运行的HTTP服务器,你需要了解java.net包下Socket类和ServerSocket类的内部运行机制。该章有详细的背景信息介绍,使你可以理解该章中应用程序的运行机制。

第2章:阐明一个简单的servlet容器是如何工作的。该章有两个与servlet容器有关的应用程序,可以服务于静态资源的请求和简单Servlet的请求。此外,你会学习到如何创建request对象和response对象,并将它们传递给被请求的Servlet的service()方法。此外,在该servlet容器中有一个可以运行的Servlet,可以从Web浏览器中进行调用。

第3章:将对Tomcat 4中的默认连接器的精简版进行说明。该章中建立的应用程序可以作为一个学习工具,有助于理解在第4章中讨论的连接器。

第4章:对Tomcat 4的默认连接器进行说明。该连接器已经弃用,而是推荐使用另一个称为Coyote的执行速度更快的连接器。但是,原先的默认连接器更简单、更容易理解。

第5章:讨论容器模块。容器由org.apache.catalina.Container接口表示,共有4种类型的容器,分别是Engine、Host、Context和Wrapper。该章提供了两个分别与Context和Wrapper相关的应用程序。

第6章:对Lifecycle接口进行说明。该接口定义了Catalina组件的生命周期,并提供了一种优雅的方法来通知其他组件在该组件中发生了某种事件。此外,Lifecycle接口提供了一种优雅的机制来启动和关闭Catalina中所有的组件,只需要启动/关闭一次即可。

第7章:介绍日志记录器组件,该组件用于记录错误消息和其他的相关消息。

第8章:对载入器组件进行介绍,载入器是Catalina中的重要模块,负责载入Servlet和Web应用程序中所需要的其他类。该章还将说明Web应用程序的重载是如何实现的。

第9章:介绍管理器组件。该组件负责在会话管理中管理会话。该章介绍了几种不同类型的管理器,并说明了管理器组件是如何持久化一个session对象的。在该章末尾,介绍如何使用StandardManager实例构建一个使用session对象保存数据的应用程序。

第10章:该章将讨论Web应用程序的安全限制,以限制对某些内容的访问。你会学习到一些与安全相关的实体,如主体、角色、登录配置和身份验证等。该章有两个应用程序,分别在StandardContext对象中安装了验证器阀,并使用基本验证来对用户进行身份验证。

第11章:对org.apache.catalina.core.StandardWrapper类进行了详细阐述,该类表示Web应用程序中的一个Servlet对象。该章还说明了过滤器和Servlet的service()方法是如何调用的。该章的应用程序使用StandardWrapper实例来表示实际的Servlet对象。

第12章:介绍org.apache.catalina.core.StandardContext类,该类表示一个Web应用程序。该章还说明了如何对一个StandardContext对象进行配置(这是在接收到HTTP请求时进行的)、如何支持Web应用程序的自动重载,以及Tomcat 5如何通过一个共享线程来执行其相关联组件中的周期性任务。

第13章:对另外两种容器(Host和Engine)进行说明。该章对这两种容器的标准实现org.apache.catalina.core.StandardHost和org.apache.catalina.core.StandardEngine进行了说明。

第14章:对服务器组件和服务组件进行介绍。服务器组件提供了一种优雅的机制来启动或关闭整个servlet容器,服务组件可作为一个容器和一个或多个连接器的持有者。该章通过应用程序来说明如何使用服务器组件和服务组件。

第15章:说明如何通过Digester组件来对Web应用程序进行配置。Digester是Apache软件基金会的一个开源项目。即使你对这个不熟悉也没有关系,该章会简要介绍Digester库,说明如何使用该库来将XML文档中的节点转换为Java对象。该章然后说明Tomcat是如何通过ContextConfig对象来对StandardContext对象进行配置的。

第16章:对Tomcat中的关闭钩子进行说明。不论用户如何关闭Tomcat(即通过发送关闭命令,或是突然直接关闭控制台),通过使用关闭钩子,Tomcat总是可以执行一些清理工作。

第17章:对使用批处理文件和Shell脚本来启动和关闭Tomcat进行说明。

第18章:对部署器组件进行说明,该组件负责部署和安装Web应用程序。

第19章:对一个特殊接口(ContainerServlet)进行说明。使用该接口,Servlet对象可以访问Catalina中的内部对象。此外,该章会对用来管理已部署应用程序的Manager应用程序进行说明。

第20章:对JMX进行说明,并阐述Tomcat是如何为其内部对象创建MBean,并使这些内部对象可托管的。

每一章的应用程序

每一章都会有一个或多个应用程序用来解释Catalina中的某个特定组件的使用方法。一般情况下,在该应用程序中你会找到该组件的精简版,或是为说明如何使用Catalina组件而编写的代码。在每一章的应用程序中编写的所有的类和接口都在ex[章号].pyrmont包下。例如,第1章的应用程序类会在ex01.pyrmont包下。

准备必需的软件

本书的应用程序会运行在J2SE的1.4版本下。源文件的压缩包可以从作者的网站www.brainysoftware.com上下载。该压缩包包含了Tomcat 4.1.12的源代码,以及本书中的应用程序的代码。假设你已经安装了J2SE的1.4版本,而且环境变量path也已经包含了JDK的路径,那么只需执行下面的步骤。

1)解压缩zip文件。解压缩后会有一个名为HowTomcatWorks的新文件夹。HowTomcatWorks是工作目录,其下有一些子目录,包括lib(包含所有必需的库文件)、src(包含所有源文件)、webroot(包含一个HTML文件和三个Servlet示例文件)和webapps(包含示例应用程序);

2)进入到工作目录中,编译Java文件。若你使用Windows操作系统,则运行win-compile.bat批处理文件。若你使用Linux操作系统,则执行下面的命令(必要时,不要忘记用chmod命令修改文件的执行权限):

./linux-compile.sh

注意 更多的信息可以在压缩包的Readme.txt文件中找到。


【内容简介】

《深入剖析Tomcat》(How Tomcat Works)深入剖析Tomcat 4和Tomcat 5中的每个组件,并揭示其内部工作原理。通过学习本书,你将可以自行开发Tomcat组件,或者扩展已有的组件。

本书主要内容:

  • 如何开发Java Web服务器。
  • Tomcat是否会为每个servlet类创建多个实例。
  • Tomcat如何运行一个实现SimpleThreadModel接口的servlet类。
  • servlet容器的两个主要模块:连接器和servlet容器。
  • 如何构建或者扩展已有的连接器。
  • 4种servlet容器:Engine、Host、Context和Wrapper。
  • Tomcat如何管理Session,以及如何在分布式环境下扩展Session管理器。
  • Tomcat中的类载入器和如何创建自定义载入器。
  • Tomcat如何实现安全性和基本/基于表单/摘要的身份验证。
  • Tomcat中的领域与登录配置是如何工作的。
  • Tomcat如何处理配制文件(server.xml),以及如何通过Digester库将XML元素转换为Java对象。
  • Tomcat中的关闭钩子。
  • JMX、Apache的 Commons Modeler和Tomcat中的JMX托管资源。

了解本书更多信息,请点击【互动网】【卓越网】【豆瓣网

【作者简介】

Budi Kurniawan是《Java for Web With Servlets, JSP and EJB》的作者,同时也是一位IT咨询师,主要研究方向包括互联网与面向对象程序设计。除了其他一些计算机图书,他已经在10多种出版物上发表了约100篇文章,其中包括一些享有盛誉的Java杂志,如《Java.net》、《JavaPro》、《JavaWorld》等。Budi也是Brainysoftware.com的应用程序File Upload Bean的作者,在世界范围内很多公司都获得授权并使用该应用程序。

Paul Deck是一个有15多年经验的IT架构师,参与了很多项目的开发,这些项目遍布在美国、加拿大、中国和澳大利亚。他喜欢旅行,对网络、互联网编程、设计模式和用户界面交互设计非常感兴趣。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics