深入剖析Tomcat

/ 书籍 / 0 条评论 / 759浏览 / 我要评论

下载

电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍

封页

封页

编辑推荐

  深入剖析Tomcat 4 和Tomcat 5 中的每个组件,并揭示其内部工作原理   适合于所有使用Java技术工作的开发人员阅读

内容简介

  本书深入剖析Tomcat 4和Tomcat5中的每个组件,并揭示其内部工作原理。通过学习本书,你将可以自行开发Tomcat组件,或者扩展已有的组件。Tomcat是目前比较流行的Web服务器之一。作为一个开源和小型的轻量级应用服务器,Tomcat易于使用,便于部署,但Tomcat本身是一个非常复杂的系统,包含了很多功能模块。这些功能模块构成了Tomcat的核心结构。本书从最基本的HTTP请求开始,直至使用JMX技术管理Tomcat中的应用程序,逐一剖析Tomcat的基本功能模块,并配以示例代码,使读者可以逐步实现自己的Web服务器。

作者简介

Budi Kurniawan是《Java for Web With Servlets, JSP andEJB》的作者,同时也是一位IT咨询师,主要研究方向包括互联网与面向对象程序设计。除了其他一些计算机图书,他已经在10多种出版物上发表了约100篇文章,其中包括一些享有盛誉的Java杂志,如《Java.net》、《JavaPro》、《JavaWorld》等。Budi也是Brainysoftware.com的应用程序FileUpload Bean的作者,在世界范围内很多公司都获得授权并使用该应用程序。
PaulDeck是一个有15多年经验的IT架构师,参与了很多项目的开发,这些项目遍布在美国、加拿大、中国和澳大利亚。他喜欢旅行,对网络、互联网编程、设计模式和用户界面交互设计非常感兴趣。


译者序:
Tomcat是Apache 软件基金会(Apache SoftwareFoundation)的一个*项目,由Apache、Sun和其他一些公司及个人共同开发,是目前比较流行的Web服务器之一。作为一个开源的、小型的轻量级应用服务器,Tomcat深受广大程序员的喜爱,具有占用系统资源少,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断地改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。
虽然Tomcat易于使用,便于部署,但Tomcat本身是一个非常复杂的系统,包含了很多功能模块。这些功能模块密切合作,各司其职,构成了Tomcat的核心结构。作者从最基本的HTTP请求开始,直至使用JMX技术管理Tomcat中的应用程序,逐步深入,逐一剖析Tomcat的基本功能模块,并配以示例代码,使读者可以逐步实现自己的一个Web服务器。
当然,本书并不能完全覆盖Tomcat,书中并没有包含Tomcat的太多设计思路及具体的实现细节,而是更注重对Tomcat基本结构的分析介绍。在每一章中都有与本章内容相关的示例应用程序,帮助读者更好地理解该章的内容。
本书由曹旭东翻译,由于时间仓促,加上译者水平有限,书中难免有疏漏之处,望广大读者予以指正。
曹旭东

目 录

译者序
前言
第1章 一个简单的Web服务器
 1.1 HTTP
 1.1.1 HTTP请求
 1.1.2 HTTP响应
 1.2 Socket类
 1.3 应用程序
 1.3.1 HttpServer类
 1.3.2 Request类
 1.3.3 Response类
 1.3.4 运行应用程序
 1.4 小结
第2章 一个简单的servlet容器
 2.1 javax.servlet.Servlet接口
 2.2 应用程序
 2.2.1 HttpServer1类
 2.2.2 Request类
 2.2.3 Response类
 2.2.4  StaticResourceProcessor类
 2.2.5 servletProcessor1类
 2.2.6 运行应用程序
 2.3 应用程序
 2.4 小结
第3章 连接器
 3.1 StringManager类
 3.2 应用程序
 3.2.1 启动应用程序
 3.2.2 HttpConnector类
 3.2.3 创建HttpRequest对象
 3.2.4 创建HttpResponse对象
 3.2.5 静态资源处理器和servlet处理器
 3.2.6 运行应用程序
 3.3 小结
第4章 Tomcat的默认连接器
 4.1 HTTP 1.1的新特性
 4.1.1 持久连接
 4.1.2 块编码
 4.1.3 状态码100的使用
 4.2 Connector接口
 4.3 HttpConnector类
 4.3.1 创建服务器套接字
 4.3.2 维护HttpProcessor实例
 4.3.3 提供HTTP请求服务
 4.4 HttpProcessor类
 4.5 Request对象
 4.6 Response对象
 4.7 处理请求
 4.7.1 解析连接
 4.7.2 解析请求
 4.7.3 解析请求头
 4.8 简单的Container应用程序
 4.9 小结
第5章 servlet容器
 5.1 Container接口
 5.2 管道任务
 5.2.1 Pipeline接口
 5.2.2 Valve接口
 5.2.3 ValveContext接口
 5.2.4 Contained接口
 5.3 Wrapper接口
 5.4 Context接口
 5.5 Wrapper应用程序
 5.5.1 ex05.pyrmont.core.SimpleLoader类
 5.5.2 ex05.pyrmont.core.SimplePipeline类
 5.5.3 ex05.pyrmont.core.SimpleWrapper类
 5.5.4 ex05.pyrmont.core.SimpleWrapperValve类
 5.5.5 ex05.pyrmont.valves.ClientIPLoggerValve类
 5.5.6 ex05.pyrmont.valves.HeaderLoggerValve类
 5.5.7 ex05.pyrmont.startup.Bootstrap
 5.5.8 运行应用程序
 5.6 Context应用程序
 5.6.1 ex05.pyrmont.core.SimpleContextValve类
 5.6.2 ex05.pyrmont.core.SimpleContextMapper类
 5.6.3 ex05.pyrmont.core.SimpleContext类
 5.6.4 ex05.pyrmont.startup.Bootstrap
 5.6.5 运行应用程序
 5.7 小结
第6章 生命周期
 6.1 Lifecycle接口
 6.2 LifecycleEvent类
 6.3 LifecycleListener接口
 6.4 LifecycleSupport类
 6.5 应用程序
 6.5.1 ex06.pyrmont.core.SimpleContext类
 6.5.2 ex06.pyrmont.core.SimpleContextLifecycleListener类
 6.5.3 ex06.pyrmont.core.SimpleLoader类
 6.5.4 ex06.pyrmont.core.SimplePipeline类
 6.5.5 ex06.pyrmont.core.SimpleWrapper类
 6.5.6 运行应用程序
 6.6 小结
第7章 日志记录器
 7.1 Logger接口
 7.2 Tomcat的日志记录器
 7.2.1 LoggerBase类
 7.2.2 SystemOutLogger类
 7.2.3 SystemErrLogger类
 7.2.4 FileLogger类
 7.3 应用程序
 7.4 小结
第8章 载入器
 8.1 Java的类载入器
 8.2 Loader接口
 8.3 Reloader接口
 8.4 WebappLoader类
 8.4.1 创建类载入器
 8.4.2 设置仓库
 8.4.3 设置类路径
 8.4.4 设置访问权限
 8.4.5 开启新线程执行类的重新载入
 8.5 WebappClassLoader类
 8.5.1 类缓存
 8.5.2 载入类
 8.5.3 应用程序
 8.6 运行应用程序
 8.7 小结
第9章 Session管理
 9.1 Session对象
 9.1.1 Session接口
 9.1.2 StandardSession类
 9.1.3 StandardSessionFacade类
 9.2 Manager
 9.2.1 Manager接口
 9.2.2 ManagerBase类
 9.2.3 StandardManager类
 9.2.4 PersistentManagerBase类
 9.2.5 PersistentManager类
 9.2.6 DistributedManager类
 9.3 存储器
 9.3.1 StoreBase类
 9.3.2 FileStore类
 9.3.3 JDBCStore类
 9.4 应用程序
 9.4.1 Bootstrap类
 9.4.2 SimpleWrapperValve类
 9.4.3 运行应用程序
 9.5 小结
第10章 安全性
 10.1 领域
 10.2 GenericPrincipal类
 10.3 LoginConfig类
 10.4 Authenticator接口
 10.5 安装验证器阀
 10.6 应用程序
 10.6.1 ex10.pyrmont.core.SimpleContextConfig类
 10.6.2 ex10.pyrmont.realm.SimpleRealm类
 10.6.3 ex10.pyrmont.realm.SimpleUserDatabaseRealm
 10.6.4 ex10.pyrmont.startup.Bootstrap1类
 10.6.5 ex10.pyrmont.startup.Bootstrap2类
 10.6.6 运行应用程序
 10.7 小结
第11章 StandardWrapper
 11.1 方法调用序列
 11.2 SingleThreadModel
 11.3 StandardWrapper
 11.3.1 分配servlet实例
 11.3.2 载入servlet类
 11.3.3 ServletConfig对象
 11.3.4 servlet容器的父子关系
 11.4 StandardWrapperFacade类
 11.5 StandardWrapperValve类
 11.6 FilterDef类
 11.7 ApplicationFilterConfig类
 11.8 ApplicationFilterChain类
 11.9 应用程序
 11.10 小结
第12章 StandardContext类
 12.1 StandardContext的配置
 12.1.1 StandardContext类的构造函数
 12.1.2 启动StandardContext实例
 12.1.3 invoke()方法
 12.2 StandardContextMapper类
 12.3 对重载的支持
 12.4 backgroundProcess()方法
 12.5 小结
第13章 Host和Engine
 13.1 Host接口
 13.2 StandardHost类
 13.3 StandardHostMapper类
 13.4 StandardHostValve类
 13.5 为什么必须要有一个Host容器
 13.6 应用程序1
 13.7 Engine接口
 13.8 StandardEngine类
 13.9 StandardEngineValve类
 13.10 应用程序2
 13.11 小结
第14章 服务器组件和服务组件
 14.1 服务器组件
 14.2 StandardServer类
 14.2.1 initialize()方法
 14.2.2 start()方法
 14.2.3 stop()方法
 14.2.4 await()方法
 14.3 Service接口
 14.4 StandardService类
 14.4.1 connector和container
 14.4.2 与生命周期有关的方法
 14.5 应用程序
 14.5.1 Bootstrap类
 14.5.2 Stopper类
 14.5.3 运行应用程序
 14.6 小结
第15章 Digester库
 15.1 Digester库
 15.1.1 Digester类
 15.1.2 Digester库示例1
 15.1.3 Digester库示例2
 15.1.4 Rule类
 15.1.5 Digester库示例3:使用RuleSet
 15.2 ContextConfig类
 15.2.1 defaultConfig()方法
 15.2.2 applicationConfig()方法
 15.2.3 创建Web Digester
 15.3 应用程序
 15.4 小结
第16章 关闭钩子
 16.1 关闭钩子的例子
 16.2 Tomcat中的关闭钩子
 16.3 小结
第17章 启动Tomcat
 17.1 Catalina类
 17.1.1 start()方法
 17.1.2 stop()方法
 17.1.3 启动Digester对象
 17.1.4 关闭Digester对象
 17.2 Bootstrap类
 17.3 在Windows平台上运行Tomcat
 17.3.1 如何编写批处理文件
 17.3.2 catalina.bat批处理文件
 17.3.3 在Windows平台上启动Tomcat
 17.3.4 在Windows平台上关闭Tomcat
 17.4 在Linux平台上运行Tomcat
 17.4.1 如何编写UNIX/Linux Shell脚本
 17.4.2 catalina.sh脚本
 17.4.3 在UNIX/Linux平台上启动Tomcat
 17.4.4 在UNIX/Linux平台上关闭Tomcat
 17.5  小结
第18章 部署器
 18.1 部署一个Web应用程序
 18.1.1 部署一个描述符
 18.1.2 部署一个WAR文件
 18.1.3 部署一个目录
 18.1.4 动态部署
 18.2 Deploy接口
 18.3 StandardHostDeployer类
 18.3.1 安装一个描述符
 18.3.2 安装一个WAR文件或目录
 18.3.3 启动Context实例
 18.3.4 停止一个Context实例
 18.4 小结
第19章 Manager应用程序的servlet类
 19.1 使用Manager应用程序
 19.2 Containerservlet接口
 19.3 初始化ManagerServlet
 19.4 列出已经部署的Web应用程序
 19.5 启动Web应用程序
 19.6 关闭Web应用程序
 19.7 小结
第20章 基于JMX的管理
 20.1 JMX简介
 20.2 JMX API
 20.2.1 MBeanServer类
 20.2.2 ObjectName类
 20.3 标准MBean
 20.4 模型MBean
 20.4.1 MBeanInfo接口与ModelMBeanInfo接口
 20.4.2 ModelMBean示例
 20.5 Commons Modeler库
 20.5.1 MBean描述符
 20.5.2 mbean元素示例
 20.5.3 自己编写一个模型 MBean类
 20.5.4 Registry类
 20.5.5 ManagedBean
 20.5.6 BaseModelMBean
 20.5.7 使用Modeler库API
 20.6 Catalian中的MBean
 20.6.1 ClassNameMBean类
 20.6.2 StandardServerMBean类
 20.6.3 MBeanFactory类
 20.6.4 MBeanUtil
 20.7 创建Catalina的MBean
 20.8 应用程序
 20.9 小结

前 言

欢迎阅读本书。本书剖析了Tomcat 4.1.12版本和Tomcat5.0.18版本的基本结构,并解释了其servlet容器Catalina的内部工作原理。Catalina是开源、免费的,也是最受欢迎的servlet容器之一。Tomcat本身是一个复杂的系统,包含了许多不同的组件。若你想学习Tomcat的工作方式,应该从了解这些组件开始。本书描述Tomcat的总体结构,并针对每个组件建立一个简单的版本,使你更好地理解组件的工作机制,之后对真实组件进行描述。
“本书结构”一节会对全书的章节设置做一个总体介绍,并说明构建的应用程序的总体结构。在“准备必需的软件”一节,说明需要下载使用哪些软件,如何为代码创建目录结构等。
本书读者对象
本书适合于所有使用Java技术工作的开发人员。
 如果你是一名JSP/Servlet程序员或Tomcat用户,并想了解servlet容器是如何工作的,那么本书很适合你;
 如果你想加入Tomcat开发团队,那么本书很适合你,因为你首先要学习已有的代码是如何工作的;
 如果你不是一名Web开发人员,但对软件开发很有兴趣,那么你可以从本书中学习到一个大型应用软件(如Tomcat)是如何设计和开发的;
 如果你想对Tomcat进行配置或定制,你应该阅读本书。
为了更好地理解本书所讲述的内容,你需要理解Java中的面向对象编程知识,以及Servlet编程方面的知识。如果你对后者还不熟悉,那么你学习起来可能会有些困难。你可以先学习一下Servlet编程方面的知识,例如看一下Budi的《Javafor the Web with Servlets, JSP, andEJB》一书。为了使你更好地理解本书的内容,每一章的开头都会有一段与该章内容相关的背景信息的介绍。
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和JSP1.2规范;
 Tomcat 5默认的连接器比Tomcat 4默认的连接器执行效率更高;
 Tomcat 5使用共享线程来执行后台任务,而Tomcat 4的组件使用各自的线程执行后台任务,因此,相比于Tomcat4,Tomcat 5更节省资源;
 Tomcat 5不再使用映射器组件来查找子组件,因此,代码更简单。

返回顶部
顶部