图I.1 Catalina主要组成部分
图表如图I.1所示,当然有点过分单纯化、没能具体说明。在接下来的章节您将会一个接一个的揭开各组件的面纱。
    现在,回到图I.1,connector是将容器和request连接起来。它的工作是构造它所接收的HTTP请求所需要的request和response对象。然后传递给该容器。容器将重request和response对象中接收connector(连接器)并为调用servlet的service方法负责。
    然而上面只是很简单的描述,container能做的还有很多事情。例如,在调用servlet的service方法之前,必须加载这个servlet、可信的用户(如果需要)、为这个用户修改session等。一个容器使用多个模块传递不在是令人惊奇的事。例如:manager module(主模块)传递用户的session,loader(加载模块)加载servlet classes(类)等。
Tomcat 4 和 5
本书覆盖Tomcat 4 和5 他们之间有一些不同:
 Tomcat 5 支持Servlet2.4和JSP2.0规范,Tomcat4支持Servlet2.3和JSP1.2。
 Tomcat 5 比Tomcat 4 有更多更有效的默认connector(连接器)。
 Tomcat 5 在后台共享一个线程而Tomcat 4 的组件在后台有他们自己的线程。因此Tomcat 5 使用更少的资源。
 Tomcat 5 不需要影射组件来寻找子组件,因而简化了编码。
各章节浏览:
本书一共有20章。前两章做了一个简单的介绍。第一章解释了HTTP server如何工作。第二章讲了一个比较系统的简单的servlet容器。接下来两章关注connector(连接器)第5到20章覆盖容器的每个组件。下面是每个章节的目录。
注意:
下面每个章节都伴随一个应用如同刚才解释的component。
第一章:通过一个很直观的简单的HTTP server开始了本书的介绍。建立一个HTTP server工作,您需要大体了解java.net包中2个类:Socket和ServerSocket。本章有关于这两个类很充分的背景资料信息去帮组您理解如何伴随一个应用工作。
第二章:解释一个简单的servlet容器如何工作。这章里有两个servlet容器他们为静态资源传递请求如同简单的servlet。更详细地,您将学到如何建立request和response对象去传递他们请求servlet的service方法。而且这还有servlet可以在servlet容器内部运行,您可以重web browser
中调用。
第三章:介绍Tomcat 4 中一个简单的缺省的connector(连接器)。这个应用在本章作为一个学习的工具服务于如何理解第四章中讨论的connector(连接器)。
第四章:解释Tomcat4缺省的connector(连接器)。这个connector已经被一个名字叫Coyote的connector所代替。然而,这个缺省的connector还是一个比较简单易懂的连接器。
第五章:讨论container模版。一个container通过org.apche.catalina.Container接口所描述。并且分为4种类型的container:engine、host、context和wrapper。本章涉及到其中的两个contexts 和 wrappers。
第六章:解释了Lifecycle接口。这个接口定义了Catalina组件的生命周期并且提供为发生在该组件的事件的组件一个优雅算法。另外,还提供了很优雅的智能机制通过一个简单的start/stop去启动和停止Catalina的所有组件。
第七章:覆盖了loggers组件,它可以记录被使用组件的错误信息和其他信息。
第八章:解释了关于loaders组件。Loader是一个非常重要的Catalina模块,依赖于加载web应用的servlet和其他的类。本章也展示了应用如何加载是可靠的。
第九章:讨论了manager组件,它是在session管理范围中管理session的。它解释了不同类型的manager和一个manager如何在存储中持续session对象。本章的最后,您将学习到如何建立一个StandardManager接口的应用去运行一个servlet使用session对象去存储值。
第十章:涵盖web应用为约束访问某个内容而进行的安全压缩。您将会学习到涉及安全的实体。如同:principals、roles、login config、authenticators等。您将会用StandardContext对象写出两个应用去建立鉴定者容器用基础的鉴定去验证用户。
第十一章:解释了org.apache.catalina.core.StandardWrapper类的细节,该类是描绘servlet在web应用。更细节地解释了过滤器和servlet的service方法如何被调用。伴随本章的一个应用使用StandardWrapper去实例描绘servlets。
第十二章:讲述用org.apache.catalina.core.StandardContext类描绘web应用。本章更细节的讲述如何配置StandardContext对象,在每个即将来临的HTTP请求中它会发生什么变化,它是如何支持自动加载。Tomcat 5 如何在它的联合组建中共享线程去执行周期任务。
第十三章:介绍其他的两个容器:host和engine。您也能够找到这两个组件标准的使用方法。
第十四章:提供了server和service组件。一个server提供了一个elegant去控制整个servlet容器启动和停止机制,一个service作为一个holder为一个容器或者更多的连接器服务。这个应用伴随本章来演示如何使用server和service。
第十五章:通过一个来自Apache 软件组的一个开源工程Digester解释配置一个web应用。由于它还没有启动,本章抽出一小部分逐渐地介绍Digester标记库和如何使用它去改变XML文件中的java对象。然后解释了StandardContext对象的一个实例ContextConfig。
第十六章:解释用shutdown关闭Tomcat,而不关心用户是如何关闭Tomcat。
第十七章:介绍通过批处理文件和命令行脚本去启动和关闭Tomcat。
第十八章:讲述deployer(配置),为配置和安装web应用的组件。
第十九章:讨论一个特殊的接口ContainerServlet,它能为servlet准确无误的传递Catalina对象。更详细地讨论Manager应用,您可以使用manage去配置您的应用。
第二十章:讨论JMX和Tomcat如果使它的内置对象通过建立这些对象的MBeans来易于管理。

解决方案 »

  1.   

    每个章节的应用
                每个章节都有一个或多个基于Catalina细节的组件的应用。正常地您可以找到这些组件的简单的版本解释或者编写如何使用Catalina组件。本章应用所有的类或者接口都在ex[章节的编号].pyromnt包或者它的子包中。例如:第一章的类在ex01.pyrmont包中。
    所需要准备的软件
    本书的应用需要J2SE1.4版。它的压缩未见可以在www.brainysoftware.com下载。它包含Tomcat4.1.12的源代码和本书应用的源代码。假定您已经安装了J2SE1.4和本地JDK的运行环境,按照以下步骤:
    1. 解开zip文件。所有的文件在您新建的名字为HowTomcatWorks目录。HowTomcatWorks是您工作的目录。在它下面有一些子目录。包括lib(包含所有所需要libraries),src(包含所有的源代码文件),webroot(包含一个HTML文件和三个servlet例子)和webapps(包含应用的例子)。
    2. 改变目录到工作的目录并且编译java文件。如果您使用Windows运行win-compile.bat文件。如果您使用Linux,运行下面代码:
    ./linux-comile.sh
        注意:
               更多的信息包含在zip文件中的Readme.txt文件中。
    未完待续
      

  2.   

    第一章 简单的web服务
    本章解释了java web servers如果工作。一个web server通常也被称为Hypertext Transfer Protocol(HTTP)服务,因为它是用HTTP通过web浏览器与他们的客户端交流。一个java-based web服务通常用到两个重要的类:java.net.Socket和java.net.ServerSocket,并且通过HTTP传送信息。很自然地,要从讨论HTTP和这两个类开始本章的介绍。然后,伴随本章解释一个简单的web应用。
    超文本传输协议(HTTP)
    HTTP是一个应用Internet通过web服务器和浏览器传递和接收数据的协议。它是一个请求和响应的协议。客户端请求一个文件并且浏览器响应这个请求。HTTP使用可靠的TCP连接通过TCP缺省的端口80。最开始的HTTP版本是HTTP/0.9,已经完全被HTTP/1.0所代替。更换HTTP/1.0的是当代HTTP/1.1版本,它定义在Request for Comments(RFC)2616,在http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf下载。
    注意:
        本部分仅涵盖HTTP1.1的简要并且能帮助您理解通过web server应用传递信息。如果您感兴趣更多的细节请阅读RFC2616。     在HTTP中,通常是一个客户端通过起初处理建立一个连接并发送一个HTTP请求。Web server没有位置去连接客户端或者建立一个回叫连接到客户端。客户端和服务器都能提前中止一个连接。
    例如:当使用Web浏览器您可以点击停止按钮去停止下载传输一个文件,用web server能更有效的关闭HTTP连接。
    HTTP请求
    一个HTTP请求由3个组件组成:
     Method——Uniform Resource Identifier(URI)——Protocol/Version
     Request headers
     Entity body
    下面是HTTP请求的一个例子:
    POST /examples/default.jsp HTTP/1.1
    Accept: text/plain; text/html
    Accept-Language: en-gb
    Connection: Keep-Alive
    Host: localhost
    User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
    Content-Length: 33
    Content-Type: application/x-www-form-urlencoded
    Accept-Encoding: gzip, deflate
    lastName=Franks&firstName=Michael
    方法——URI——协议呈现在请求的第一行。
    POST/examples/default.jsp HTTP/1.1
    POST是请求的方法,/examples/default.jsp 扮演了URI和HTTP/1.1协议部分。
        每个HTTP请求能够使用标准HTTP请求中其中的一个。HTTP1.1支持7种请求方式:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE。POST和GET是在Internet应用中最常见的。
         URI完全列出类Internet的资源。一个URI通常解释相对于服务器根目录的地址。因而,它通常以一个斜线“/”开头。一个Uniform Resource Locator(URL)通常是(URI)的一种(参照:http://www.ietf.org/rfc/rfc2396.txt)。该版协议解释了正在使用的HTTP协议。
         Request header(请求头)包含关于客户端和请求实体中最有用的信息。例如:它包含浏览器设置的语言,实体的长度,等等。每一个头都被 carriage return/linefeed(CRLF)序列分开。     在实体和头之间,有条个空行(CRLF),它对格式化HTTP请求非常重要。CRLF会告诉HTTP服务器重哪个实体开始。在一些Internet程序书中,CRLF被看作是HTTP请求的第四组件。
         在现在的HTTP请求,实体就像下面所写的:
    lastName=Franks&firstName=Michael
    实体在HTTP请求中很容易变得比较持久。
    HTTP 响应
    与HTTP请求很相似,一个HTTP响应也包括3部分:
     Protocol——Status code——Description
     Response headers 
     Entity body
    下面是HTTP响应的一个例子:
    HTTP/1.1 200 OK
    Server: Microsoft-IIS/4.0
    Date: Mon, 5 Jan 2004 13:13:33 GMT
    Content-Type: text/html
    Last-Modified: Mon, 5 Jan 2004 13:13:12 GMT
    Content-Length: 112
    <html>
    <head>
    <title>HTTP Response Example</title>
    </head>
    <body>
    Welcome to Brainy Software
    </body>
    </html>
    未完待续