`
wxb880114
  • 浏览: 678777 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

How Tomcat Work——Tomcat 的默认连接器

阅读更多
注意: 本章中提及的“默认连接器”是指Tomcat4的默认连接器。即使默认的连机器已经被弃用,
被更快的,代号为Coyote的连接器所代替,它仍然是一个很好的学习工具。
    Tomcat 连接器是一个可以插入 servlet 容器的独立模块,已经存在相当多的连接器了,包
括Coyote, mod_jk, mod_jk2和mod_webapp。一个Tomcat连接器必须符合以下条件:
1. 必须实现接口org.apache.catalina.Connector。
2. 必须创建请求对象,该请求对象的类必须实现接口org.apache.catalina.Request。
3. 必须创建响应对象,该响应对象的类必须实现接口org.apache.catalina.Response。
    Tomcat4的默认连接器类似于第3章的简单连接器。它等待前来的HTTP请求,创建request
和 response 对象,然后把 request 和 response 对象传递给容器。连接器是通过调用接口
org.apache.catalina.Container 的 invoke 方法来传递 request 和 response 对象的。invoke
的方法签名如下所示:
public void invoke(
    org.apache.catalina.Request request,
    org.apache.catalina.Response response);
    在 invoke 方法里边,容器加载 servlet,调用它的 service 方法,管理会话,记录出错日
志等等。
    本章中的应用程序是一个和默认连接器管理的简单容器。然而,本章的焦点不是简单容器而
是默认连接器。我们将会在第5章中讨论容器。不管怎样,为了展示如何使用默认连接器,将会
在接近本章末尾的“简单容器的应用程序”一节中讨论简单容器。
    另一个需要注意的是默认连接器除了提供HTTP0.9和HTTP1.0的支持外,还实现了HTTP1.1
的所有新特性。为了理解HTTP1.1中的新特性,你首先需要理解本章首节解释的这些新特性。在
这之后,我们将会讨论接口
org.apache.catalina.Connector和如何创建请求和响应对象。假如你理解第3章中连接器如何
工作的话,那么在理解默认连接器的时候你应该不会遇到任何问题。
    本章首先讨论HTTP1.1的三个新特性。理解它们是理解默认连接器内部工作机制的关键所在。
然后,介绍所有连接器都会实现的接口 org.apache.catalina.Connector。你会发现第3章中遇
到的那些类,例如 HttpConnector, HttpProcessor 等等。不过,这个时候,它们比第 3 章那些
类似的要高级些。

HTTP 1.1 新特性
    本节解释了HTTP1.1的三个新特性。理解它们是理解默认连接器如何处理HTTP请求的关键。
持久连接
    在 HTTP1.1 之前,无论什么时候浏览器连接到一个web 服务器,当请求的资源被发送之后,
连接就被服务器关闭了。然而,一个互联网网页包括其他资源, 例如图片文件,applet 等等。
因此,当一个页面被请求的时候,浏览器同样需要下载页面所引用到的资源。加入页面和它所引
用到的全部资源使用不同连接来 下载的话,进程将会非常慢。那就是为什么 HTTP1.1引入持久
连接的原因了。使用持久连接的时候,当页面下载的时候,服务器并不直接关闭连接。相反,它
等待web客户端请求页面所引用的全部资源。这种情况下,页面和所引用的资源使用同一个连接
来下载。考虑建立和解除HTTP连接的宝贵操作的话,这就为 web服务器,客户端和网络节省了
许多工作和时间。
    持久连接是 HTTP1.1 的默认连接方式。同样,为了明确这一点,浏览器可以发送一个值为
keep-alive的请求头部connection:
connection: keep-alive

块编码

    建立持续连接的结果就是,使用同一个连接,服务器可以从不同的资源发送字节流,而客户
端可以使用发送多个请求。结果就是,发送方必须为每个请求或响应发送 内容长度的头部,以
便接收方知道如何解释这些字节。然而,大部分的情况是发送方并不知道将要发送多少个字节。
例如,在开头一些字节已经准备好的时 候,servlet 容器就可以开始发送响应了,而不会等到
所有都准备好。这意味着,在content-length头部不能提前知道的情况下,必须有一种 方式来
告诉接收方如何解释字节流。
    即使不需要发送多个请求或者响应,服务器或者客户端也不需要知道将会发送多少数据。在
HTTP1.0中,服务器可以仅仅省略content-length 头部,并保持写入连接。当写入完成的时候,
它将简单的关闭连接。在这种情况下,客户端将会保持读取状态,直到获取到-1,表示已经到达
文件的尾部。
    HTTP1.1使用一个特别的头部transfer-encoding来表示有多少以块形式的字节流将会被发
送。对每块来说,在数据之前,长度(十六进 制)后面接着 CR/LF 将被发送。


状态100(持续状态)的使用
    在发送请求内容之前,HTTP 1.1客户端可以发送Expect: 100-continue头部到服务器,并
等待服务器的确认。这个一般发生在当客户端需要发送一份长的请求内容而未能确保服务器愿意
接受它的时候。如果你 发送一份长的请求内容仅仅发现服务器拒绝了它,那将是一种浪费来的。
    当接受到 Expect: 100-continue头部的时候,假如乐意或者可以处理请求的话,服务器响
应100-continue头部,后边跟着两对CRLF字符。 
HTTP/1.1 100 Continue
    接着,服务器应该会继续读取输入流。

Connector 接口
    Tomcat连接器必须实现org.apache.catalina.Connector接口。在这个接口的众多方法中,
最重要的是getContainer,setContainer, createRequest和createResponse。
     setContainer 是用来关联连接器和容器用的。getContainer 返回关联的容器。
createRequest为前来的HTTP请求构造一个请求对象,而createResponse 创建一个响应对象。
    类 org.apache.catalina.connector.http.HttpConnector是 Connector 接口的一个实现,
将会在下一 节“HttpConnector类”中讨论。现在,仔细看一下Figure 4.1中的默认连接器的
UML 类图。注意的是,为了保持图的简单化,Request 和 Response 接口的实现被省略了。除了
SimpleContainer类,org.apache.catalina前缀也同样从类型名中被省略了。
分享到:
评论

相关推荐

    how tomcat work 中文版

    - **连接器(Connector)**:Tomcat支持多种类型的连接器,如Bio、Nio、Apr等,用于处理不同类型的网络通信。 - **Context**:每个Web应用程序对应一个Context,负责管理应用程序的Servlet和JSP。 - **Clustering**...

    how tomcat work_中文版(源码)

    在《如何让Tomcat工作:中文版》这本书中,读者可以详细了解到这些过程的内部细节,包括请求处理的生命周期管理、线程模型、类加载机制、安全策略、连接器(Coyote)组件、容器结构等。书中附带的源码分析部分,则有...

    how tomcat work

    Tomcat启动时,会读取`server.xml`配置文件,解析服务器的全局配置,如端口设置、连接器配置、Context定义等。然后初始化各个组件,建立监听套接字,等待客户端请求。 3. **请求处理**: - **接收请求**:当...

    How Tomcat Work 电子书+源码

    默认使用 APR (Apache Portable Runtime) 连接器,它可以利用操作系统级别的特性提高性能。 3. **请求处理**:接收到请求后,Tomcat会通过线程池分配一个线程来处理请求。线程将请求数据解析并传递给Servlet容器。 ...

    How Tomcat Work.pdf

    在介绍Tomcat的两个主要版本时,书中指出Tomcat5相较于Tomcat4有所改进,支持了更先进的Servlet2.4和JSP2.0规范,拥有更有效率的默认连接器,并且共享后台处理线程,大大减少了资源消耗。Tomcat5不需要映射组件来...

    How Tomcat Work 第一章 实例应用

    《How Tomcat Work》第一章主要围绕Tomcat服务器的实例应用展开,旨在帮助读者理解并实践Tomcat在实际开发中的工作原理。Tomcat是一款开源的、轻量级的应用服务器,主要用于运行Java Servlet和JavaServer Pages(JSP...

    HowTomcatWork 源代码

    Tomcat的架构主要包括四个主要部分:Catalina(核心处理引擎)、 Jasper(JSP编译器)、Juli(日志系统)和 Coyote(HTTP/1.1连接器)。Catalina负责管理Servlet容器,Jasper处理JSP文件的编译和执行,Juli提供日志...

    How Tomcat Work 第二章 实例应用

    《How Tomcat Work 第二章 实例应用》深入解析 在深入探讨Tomcat工作原理之前,我们先要了解什么是Tomcat。Apache Tomcat是一款开源的Java Servlet容器,它实现了Java Servlet和JavaServer Pages (JSP) 规范,是...

    学习tomcat源码+英文《How Tomcat Work》和每一章的相关项目+tomcat6源码依赖jar

    《How Tomcat Works》这本书详细介绍了这些组件的工作方式,包括线程管理、连接器架构、会话管理、安全特性等。通过阅读这本书,你可以了解到Tomcat如何处理HTTP请求,如何管理应用上下文,以及如何加载和部署Web...

    HowTomcatWork源码

    《How Tomcat Work》是一本深入探讨Apache Tomcat工作原理的书籍,其源码提供了丰富的实践案例和设计思路。Tomcat作为一个开源的Java Servlet容器,是许多Web应用程序的基础。通过研究这本书中的源码,我们可以了解...

    How Tomcat Works【英文PDF+中文HTML+源码】.zip

    1. **架构概述**:Tomcat的架构基于服务器-客户端模型,主要由Catalina(Servlet容器)、 Coyote(HTTP/HTTPS连接器)和Jasper(JSP引擎)三个主要组件构成。Catalina处理Servlet,Coyote处理网络通信,Jasper编译和...

    译How Tomcat Works(第二章)

    8. **扩展性与性能优化**:Tomcat可以通过插件、连接器和模块扩展功能。例如,通过AJP连接器实现与其他Web服务器的集成,或者使用mod_jk与Apache HTTP Server配合提高性能。 9. **故障排查与日志**:Tomcat生成详细...

    how tomcat to work

    本书名为“How Tomcat Works”,它深入剖析了Tomcat 4.1.12和5.0.18这两个版本,解释了这个开源、免费且广受欢迎的servlet容器——代号为Catalina的内部工作原理。Tomcat是一个复杂的系统,它由许多不同的组件构成。...

    How Tomcat Works.rar

    7. **性能优化**:可以通过调整连接器配置、启用线程池、限制并发连接数、使用NIO连接器等方式提高Tomcat的性能。还可以通过修改`jvmRoute`实现负载均衡。 8. **集群与复制**:对于高可用性和负载均衡,Tomcat支持...

    tomcat源码

    Tomcat支持多种连接器,如HTTP/1.1和AJP,它们负责与客户端的通信。Coyote连接器实现了这些协议,将网络数据包转化为内部的请求对象。 7. **部署与配置** 通过`web.xml`文件,开发者可以配置Web应用的各种元数据...

    Apache Tomcat集群

    #### 五、配置Apache Tomcat连接器 1. **安装mod_jk模块** - 将`mod_jk-1.2.28-httpd-2.2.3.os`复制到`Apache_HOME/modules`目录下。 2. **配置Apache HTTP Server** - 编辑`Apache_HOME/conf/httpd.conf`,在...

    HowTomcatWrks

    《HowTomcatWorks》是一本深入探讨Apache Tomcat工作原理的资源集合,包含了完整的源码和详细的PDF书籍。这份资料对于理解Tomcat的内部机制、优化服务器性能以及解决相关问题具有极大的价值。以下是对Tomcat核心知识...

    外文翻译 stus MVC

    Struts——an open-source MVC implementation This article introduces Struts, a Model-View-Controller implementation that uses servlets and JavaServer Pages (JSP) technology. Struts can help you control...

Global site tag (gtag.js) - Google Analytics