您的位置:首页 > 运维架构 > Tomcat

How tomcat works_Chapter00_Introduction

2009-07-31 10:59 183 查看
        
 
本书主要剖析Tomcat 4.1.125.0.18的源代码并解释其Servlet容器Catalina的内部工作原理。

一、Servlet的工作原理
         Servlet容器是一个复杂的系统。但简单的说,Servlet容器处理Servlet请求一般包含三个基本步骤:
(1)  创建一个请求对象,并将被调用的Servlet可能用到的信息(例如parameters、headers、cookies、query string和URI等等)进行封装。一个请求对象是接口javax.servlet.ServletRequest或者接口javax.servlet.http.ServletRequest的实例。
(2)  创建一个响应对象。被调用的Servlet使用该对象将请求的应答传递给Web客户端。一个响应对象是接口javax.servlet.ServletResponse或者接口java.servlet.http.ServletResponse的实例
(3)  调用Servlet的service()方法,并将请求对象和响应对象作为参数传入。Servlet将从请求对象中读取所需要的信息并将结果写入响应对象中。
 
二、 Catalina的设计
Catalina只要由两个模块组成:连接器(Connector)和容器(Container)。它们之间的关系如下图所示:
 
 
 
              重新回到Figure I.1,连接器是用来“连接”容器里边的请求的。它的工作是为接收到每个HTTP请求构造一个request和response对象,然后它把流程传递给容器。容器接收来自连接器的request和response对象后调用servlet的service方法用于响应。谨记,这个描述仅仅是冰山一角。容器可以做相当多事情。例如,在它调用servlet的service方法之前,它必须加载这个servlet,验证用户(假如需要的话),更新用户会话等等。一个容器为了处理这个进程使用了很多不同的模块,这也并不奇怪。例如,管理模块是用来处理用户会话,而加载器是用来加载servlet类等等。
 
三、Tomcat 4和Tomcat 5
          本书的内容将覆盖Tomcat 4和Tomcat 5。两个版本之间存在如下的不同:
(1)  Tomcat 5支持Servlet 2.4和JSP2.0规约,而Tomcat 5支持Servlet 2.3和JSP 1.2。
(2)  Tomcat 5拥有一个更高效的默认连接器(Connector)。
(3)  在后台处理中,Tomcat 4中每个组件均拥有自己的线程,而Tomcat 5共享线程, 这样减少的资源的使用。
(4)  Tomcat 5不需要使用映射组件(mapper component)来寻找子组件,因此大大简化了代码。
 
四、章节概览
         本书由20个章节组成。前两章是一个简要的入门介绍。第一章解释了HTTP服务器的工作原理,第二章描述了一个简单Servlet容器的特征。接下来两章节重点介绍连接器。第五章都第二十章依次介绍了容器中的各个组件。下面是每一章节的概要内容:
         第一章向读者呈现了一个简单的HTTP服务器。为了构建一个可以工作的HTTP服务器,需要了解两个类Socket和ServerSocket(在java.net包中)的内部工作原理。
         第二章解释了一个简单的Servlet容器是如何工作的。这章将从两个Servlet容器程序开始,它们能处理静态资源及一些简单的Servlet请求。特别地,你将了解如何创建请求对象和响应对象,并将它们传递给被请求Servlet的service()方法中,同时你也可以通过浏览器调用运行在Servlet容器中的Servlet。
         第三章描述了Tomcat 4中默认连接器的简化版本。
         第四章描述了Tomcat 4中默认连接器。这个连接器已经被更快的连接器Coyote所替代。但是这个连接器简单易于理解。
         第五章讨论了容器模块。一个容器由接口org.apache.catalina.Container定义,并且可以分为四种类型:engine、host、context和wrapper。这章节提供了使用context和wrapper类型容器的两个例子。
         第六章解释了接口LifeCycle。这个接口定义了Catalina组件的生命周期,并提供了一种优雅的方式将某个组件发生的事件通知给其它组件。另外,接口LifeCycle还为启动和停止Catalina中各个组件提供了一种优雅的机制。
         第七章介绍了logger模块,该模块主要用于记录错误信息及其它信息。
         第八章介绍了loader模块。Loader模块是Catalina中一个重要部分,主要用于加载Web应用程序所使用的Servlet类和其它类。这章将同样介绍如何实现程序的重加载。
         第九章讨论了管理器模块,该模块负责会话管理(Session Management)。本章解释了各种不同类型的管理器,并且说明了管理器是如何持久化会话对象的。在本章的最后,你将学会通过使用StandManager实例运行Servlet(其中使用会话对象来存储值)的方式构建Web应用。
         第十章介绍了Web应用的安全性限制问题,用于约束部分内容的访问权限。你将会学习到与安全相关的实体,例如主角(principals),角色(roles),登陆配置,认证等等。通过两个程序的编写在StandardContext对象中设置一个身份验证阀(authenticator valve),并使用基本认证方法对用户进行认证。
        第十一章详细解释了org.apache.catalina.core.StandardWrapper类,它代表Web应用中一个servlet。特别地,这章解释了过滤器(filter)和servlet中service()方法是如何被调用的。本章附带的程序使用StandardWrapper实例来代表servlet。
        第十二章介绍了org.apache.catalina.core.StandardContext类,该类代表一个Web应用。这章还特别讨论了四个问题:如何配置StandardContext对象;对于每个传入的HTTP请求该对象内部发生的什么;该对象如何支持自动重加载;Tomcat 5如何共享一个在其相关的组件中执行定期任务的线程。
        第十三章介绍了另外两个容器:host和engine。这两个容器的标准实现参考org.apache.catalina.core.StandardHost类和org.apache.catalina.core.StandardEngine类。
        第十四章介绍了服务器(Server)和服务(Service)组件的部分。服务器为整个servlet容器提供了一个优雅的启动和停止机制,而服务为容器和连接器(一个或多个)提供了一个支持(holder)。本章的附带程序说明如何使用服务器和服务。
        第十五章解释了如何通过Digester来配置Web应用。Digester是来源于Apache软件基金会中的一个开源项目。对那些尚未初步了解的人,本章通过一部分内容简单介绍了Digester库以及如何使用它将XML文件中的节点转换为Java对象。然后解释了用来配置一个StandardContext实例的ContextConfig对象。
        第十六章解释了shutdown钩子。无论用户如何停止Tomcat的运行,Tomcat总能使用该钩子总能获得机会进行清理工作 (即适当地发送一个shutdown命令或者不适当地直接关闭控制台)。
        第十七章讨论了通过批处理文件和shell脚本对Tomcat进行启动和停止。
        第十八章介绍了部署工具(deployer),这个组件是负责部署和安装Web应用程序。
        第十九章讨论了一个特殊的接口——ContainerServlet,它能够让servlet访问Catalina的内部对象。特别地,它讨论了管理已部署程序的Manager应用。
        第二十章讨论了JMX以及如何通过为其内部对象创建MBeans使得这些对象可管理的。
 
 
本文出自邱栋的博客,转载请注明出处!
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息