How tomcat works_Chapter00_Introduction

        

 

本书主要剖析Tomcat 4.1.125.0.18的源代码并解释其Servlet容器Catalina的内部工作原理。

一、Servlet的工作原理

         Servlet容器是一个复杂的系统。但简单的说,Servlet容器处理Servlet请求一般包含三个基本步骤:

(1)  创建一个请求对象,并将被调用的Servlet可能用到的信息(例如parametersheaderscookiesquery stringURI等等)进行封装。一个请求对象是接口javax.servlet.ServletRequest或者接口javax.servlet.http.ServletRequest的实例。

(2)  创建一个响应对象。被调用的Servlet使用该对象将请求的应答传递给Web客户端。一个响应对象是接口javax.servlet.ServletResponse或者接口java.servlet.http.ServletResponse的实例

(3)  调用Servletservice()方法,并将请求对象和响应对象作为参数传入。Servlet将从请求对象中读取所需要的信息并将结果写入响应对象中。

 

二、 Catalina的设计

Catalina只要由两个模块组成:连接器(Connector)和容器(Container)。它们之间的关系如下图所示:

 

 

 

              重新回到Figure I.1,连接器是用来连接容器里边的请求的。它的工作是为接收到每个HTTP请求构造一个requestresponse对象,然后它把流程传递给容器。容器接收来自连接器的requestresponse对象后调用servletservice方法用于响应。谨记,这个描述仅仅是冰山一角。容器可以做相当多事情。例如,在它调用servletservice方法之前,它必须加载这个servlet,验证用户(假如需要的话),更新用户会话等等。一个容器为了处理这个进程使用了很多不同的模块,这也并不奇怪。例如,管理模块是用来处理用户会话,而加载器是用来加载servlet类等等。

 

三、Tomcat 4Tomcat 5

          本书的内容将覆盖Tomcat 4Tomcat 5。两个版本之间存在如下的不同:

(1)  Tomcat 5支持Servlet 2.4JSP2.0规约,而Tomcat 5支持Servlet 2.3JSP 1.2

(2)  Tomcat 5拥有一个更高效的默认连接器(Connector)

(3)  在后台处理中,Tomcat 4中每个组件均拥有自己的线程,而Tomcat 5共享线程, 这样减少的资源的使用。

(4)  Tomcat 5不需要使用映射组件(mapper component)来寻找子组件,因此大大简化了代码。

 

四、章节概览

         本书由20个章节组成。前两章是一个简要的入门介绍。第一章解释了HTTP服务器的工作原理,第二章描述了一个简单Servlet容器的特征。接下来两章节重点介绍连接器。第五章都第二十章依次介绍了容器中的各个组件。下面是每一章节的概要内容:

         第一章向读者呈现了一个简单的HTTP服务器。为了构建一个可以工作的HTTP服务器,需要了解两个类SocketServerSocket(在java.net包中)的内部工作原理。

         第二章解释了一个简单的Servlet容器是如何工作的。这章将从两个Servlet容器程序开始,它们能处理静态资源及一些简单的Servlet请求。特别地,你将了解如何创建请求对象和响应对象,并将它们传递给被请求Servletservice()方法中,同时你也可以通过浏览器调用运行在Servlet容器中的Servlet

         第三章描述了Tomcat 4中默认连接器的简化版本。

         第四章描述了Tomcat 4中默认连接器。这个连接器已经被更快的连接器Coyote所替代。但是这个连接器简单易于理解。

         第五章讨论了容器模块。一个容器由接口org.apache.catalina.Container定义,并且可以分为四种类型:enginehostcontextwrapper。这章节提供了使用contextwrapper类型容器的两个例子。

         第六章解释了接口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)servletservice()方法是如何被调用的。本章附带的程序使用StandardWrapper实例来代表servlet

        第十二章介绍了org.apache.catalina.core.StandardContext类,该类代表一个Web应用。这章还特别讨论了四个问题:如何配置StandardContext对象;对于每个传入的HTTP请求该对象内部发生的什么;该对象如何支持自动重加载;Tomcat 5如何共享一个在其相关的组件中执行定期任务的线程。

        第十三章介绍了另外两个容器:hostengine。这两个容器的标准实现参考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使得这些对象可管理的。

 

 

本文出自邱栋的博客,转载请注明出处!

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值