转载

【译】Tomcat如何工作<介绍>

欢迎来到《Tomcat如何工作》。本书剖析了Tomcat 4.1.12和5.0.18以及解释了其免费、开源和最流行的servlet容器(代号为Catalina)的内部工作原理。Tomcat是一个复杂的系统,由许多的不同的组件组成。那些想学习Tomcat的人往往都知道从哪里开始。本书要做的是提供全景,然后建立一个每个组件的简化版本,让大家更容易理解该组件。只有在这之后,才能解释真正的组件。

你应该先阅读本简介,因为它解释了本书的结构,并简要介绍了所构建的应用程序。“准备必备软件”为你提供了有关需要下载哪些软件的说明,如何为你的代码创建目录结构等。

Who This Book Is for(这本书适合谁)

本书是为所有从事Java技术工作的人编写的。

  • 如果你是servlet/JSP程序员或Tomcat用户,并且对了解servlet容器的工作方式感兴趣,那么这本书适合你。
  • 如果你想加入Tomcat开发团队,这是给你的,因为你需要首先学习现有代码的工作方式。
  • 如果你从未参与过Web开发,但是总体上对软件开发感兴趣,那么你可以从本书中学习如何设计和开发Tomcat之类的大型应用程序。
  • 如果需要配置和自定义Tomcat,则应阅读此书。

为了理解本书的讨论,你需要了解Java中的面向对象编程以及servlet编程。如果你不熟悉后者,有大量关于servlet的书籍,包括Budi的《Java for the Web with Servlet、JSP和EJB》。为了使教材更容易理解,每一章开始都会有一些背景信息,这些信息是理解讨论中的主题所需要的。

How A Servlet Container Works(Servlet容器如何工作)

一个servlet容器是一个复杂的系统。不过,基本上servlet容器要服务于一个servlet的请求,基本上要做三件事:

  • 创建一个请求对象,并向其填充可能被调用的servlet使用的信息,如参数、标题、cookie、查询字符串、URI等。请求对象是 javax.servlet.ServletRequest 接口的一个实例或 javax.servlet.http.ServletRequest 接口。
  • 创建一个响应对象,被调用的servlet用来向web客户端发送响应。响应对象是 javax.servlet.Servlet.ServletResponse 接口的一个实例或 javax.servlet.http.ServletResponse 接口。
  • 调用servlet的服务方法,传递请求对象和响应对象。这里,servlet从请求对象中读取值,并写入响应对象。

在阅读这些章节时,你会发现关于Catalina servlet容器的详细讨论。

Catalina Block Diagram(Catalina框图)

Catalina是一款非常精致的软件,设计和开发都很优雅。它也是模块化的。根据“Servlet容器如何工作”一节中提到的任务,你可以把Catalina看作是由两个主要模块组成:连接器和容器。

当然,图1.1中的框图是简单化的。在接下来的章节中,你将在后面的章节中逐一揭开所有的小部件。

图1.1:Catalina的主要模块

现在,回到图I.1中,连接器的作用是将请求与容器连接起来。它的工作是为它收到的每一个HTTP请求构造一个请求对象和一个响应对象。然后,它将处理过程传递给容器。容器从连接器接收请求和响应对象,并负责调用servlet的服务方法。

但请记住,上面的描述只是冰山一角。容器要做的事情有很多。例如,在调用一个servlet的服务方法之前,它必须加载servlet,验证用户(如果需要的话),更新该用户的会话等等。那么,一个容器使用许多不同的模块进行处理也就不足为奇了。例如,管理器模块用于处理用户会话,加载器用于加载servlet类等。

Tomcat 4 and 5(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 5在这方面使用较少的资源。
  • Tomcat 5不需要映射器组件即可找到子组件,因此简化了代码。

Overview of Each Chapter(每章概述)

本书共有20章。前两章作为介绍。第1章介绍了HTTP服务器的工作方式,第2章介绍了一个简单的servlet容器。接下来的两章重点介绍连接器,第5章至第20章介绍了容器中的每个组件。以下是每个章节的摘要。

注意,对于每一章,都有一个与所解释的组件相似的附带应用程序。

第1章通过介绍一个简单的HTTP服务器来开始本书。要构建可用的HTTP服务器,你需要了解 java.net 包中两个类的内部工作原理: SocketServerSocket 。本章中已经有足够的背景信息介绍了这两个类,让你了解附带的应用程序是如何工作的。

第2章介绍了简单的servlet容器如何工作。本章附带了两个Servlet容器应用程序,它们可以处理对静态资源的请求以及非常简单的servlet。特别是,你将学习如何创建请求和响应对象,并将其传递给被请求的servlet的服务方法。还有一个可以在servlet容器内运行的servlet,你可以从web浏览器调用。

第3章介绍了Tomcat 4的默认连接器的简化版本。本章中构建的应用可以作为学习工具来理解第4章中讨论的连接器。

第4章介绍了Tomcat 4的默认连接器。不推荐使用此连接器,而推荐使用更快的连接器Coyote。但是,默认连接器更简单易懂。

第5章讨论了容器模块。容器由 org.apache.catina.Container 接口表示,容器有四种类型:引擎(engine)、主机(host)、上下文(context)和包装器(wrapper)。本章提供了两个使用上下文和包装器工作的应用程序。

第6章介绍了 Lifecycle 接口。该接口定义了Catalina组件的生命周期,并提供了一种优雅的方式来通知其它组件该组件中发生的事件。此外,生命周期接口提供了一种优雅的机制,可通过一次启动/停止来启动和停止Catalina中的所有组件。

第7章介绍了记录器,它们是用于记录错误消息和其它消息的组件。

第8章介绍了关于加载器。加载器是一个重要的Catalina模块,负责加载servlet和其他web应用程序所使用的类。本章还介绍了应用程序的重载是如何实现的。

第9章讨论了管理器,即会话管理中管理会话的组件。它解释了各种类型的管理器,以及管理器如何将会话对象持久化到存储中。在本章的最后,您将学习如何构建一个使用 StandardManager 实例来运行servlet的应用程序,该servlet使用会话对象来存储值。

第10章涵盖了Web应用的安全约束,用于限制对某些内容的访问。你将学习与安全相关的实体,如主体(principals)、角色(roles)、登录配置(login config)、身份验证器(authenticators)等。你还将编写两个应用程序,在 StandardContext 对象中安装一个身份验证器阀,并使用基本的身份验证来验证用户。

第11章详细解释了 org.apache.catalina.core.core.StandardWrapper 类,该类在web应用程序中表示一个servlet。特别是,本章解释了过滤器和servlet的服务方法是如何调用的。本章所附的应用程序使用 StandardWrapper 实例来表示servlet。

第12章介绍了代表web应用程序的 org.apache.catina.core.StandardContext 类。特别是这一章讨论了 StandardContext 对象是如何配置的,每次传入的HTTP请求都会在其中发生什么,它如何支持自动重载,以及Tomcat 5如何共享一个线程,在其相关组件中执行周期性任务。

第13章介绍了另外两个容器:主机和引擎。你还可以找到这两个容器的标准实现: org.apache.catina.core.core.StandardHostorg.apache.catina.core.standardEngine

第14章提供了服务器和服务组件。服务器为整个servlet容器提供了一个优雅的启动和停止机制,服务作为一个容器和一个或多个连接器的支架。本章所附的应用程序展示了如何使用一个服务器和一个服务。

第15章介绍了通过Digester(一个令人兴奋的Apache软件基金会的开放源码项目)来配置一个Web应用程序。对于那些还没有入门的人来说,本章用一节来温和地介绍Digester库,以及如何使用它将XML文档中的节点转换为Java对象。然后,它解释了 ContextConfig 对象,用于配置一个 StandardContext 实例。

第16章解释了Tomcat使用的关机钩子,无论用户如何停止,Tomcat总是会得到一个清理的机会(即适当地通过发送关机命令或不适当地直接关闭控制台)。

第17章讨论了通过使用批处理文件和shell脚本来启动和停止Tomcat。

第18章介绍了部署程序,即负责部署和安装Web应用程序的组件。

第19章讨论了一个特殊的接口,即 ContainerServlet ,用来让servlet访问Catalina内部对象。特别是,它讨论了可以用来管理已部署的应用程序的管理器应用程序。

第20章讨论JMX,以及Tomcat如何通过为那些对象创建MBean使其内部对象可管理。

The Application for Each Chapter(每章的应用)

每一章都有一个或多个应用,重点介绍了Catalina中的某个特定组件。通常,你会找到所解释的组件的简化版或解释如何使用Catalina组件的代码。各章应用程序中的所有类和接口都位于ex[章号].pyrmont包或其子包中。例如,第1章中的应用程序中的类都是 ex01.pyrmont 包的一部分。

Preparing the Prerequisite Software(准备必备软件)

本书所附的应用程序使用J2SE 1.4版本运行。压缩后的源文件可以从作者的网站上下载,网址为 https://www.brainysoftware.com 。它包含了Tomcat 4.1.12和本书中使用的应用程序的源代码。假设你已经安装了J2SE 1.4,并且你的路径环境变量中包含了JDK的位置,请按照以下步骤进行操作:

  1. 解压缩zip文件。所有解压缩的文件都将被保存在一个新的目录下,名为HowTomcatWorks。HowTomcatWorks就是你的工作目录。HowTomcatWorks下有几个子目录,包括lib (包含所有需要的库)、src (包含源文件)、webroot (包含一个HTML文件和三个示例servlets)和webapps (包含示例应用程序)。
  2. 将目录改为工作目录,并编译java文件。如果你使用的是Windows,请运行win-compile.bat文件。如果你的电脑是Linux机器,请键入以下内容。(如果有必要,不要忘记对文件进行chmod)
./linux-compile.sh
复制代码

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

原文  https://juejin.im/post/5eabc5c2f265da7bae2f9761
正文到此结束
Loading...