- 浏览: 672924 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (198)
- 编程经验 (12)
- 移动端 (2)
- linux (1)
- 基础理论 (10)
- 开发工具 (8)
- 开发语言_java (21)
- 开源框架_Axis2 (8)
- GIS开发_OpenLayers (9)
- GIS开发_ArcGIS (6)
- GIS开发_googleAPI (4)
- GIS开发_AO (2)
- Web前端_Javascript (7)
- Web前端_CSSDIV (2)
- Web前端_WebGL (5)
- Web前端_HTML5 (1)
- 数据库 (17)
- 项目管理 (6)
- REST服务_Restlet (0)
- REST服务_RestEasy (5)
- 连接池 (6)
- 框架组合_SSI (7)
- 框架组合_SSH (37)
- 异常处理 (10)
- 测试 (1)
- ASP/ASP.NET (3)
- 我所遇到的JavaScript (1)
- cas (1)
- CI (1)
- nginx (1)
- 大数据 (1)
- maven (1)
- 机器学习 (0)
最新评论
-
章元o:
正解,问题解决了,要换tomcat的
webservice开发时项目启动过程中出现版本问题 -
dcloud:
大师,按照你的指点进行初始化工作,但是在connection. ...
AO连接sde出现java.lang.UnsatisfiedLinkError: no ntvauth in java.library.path -
yiran0314:
您好 关于这个问题能描述得更详细一点吗?
CXF异常处理 -
tianhandigeng:
找了半个小时了也没小号到m2e最新的地址,既然这个都让你找得这 ...
Myeclipse8.6安装Maven插件------ -
wxb880114:
这个发的比较早了,现在在myeclipse中有自带的,ecli ...
Myeclipse8.6安装Maven插件------
注意: 本章中提及的“默认连接器”是指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前缀也同样从类型名中被省略了。
被更快的,代号为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前缀也同样从类型名中被省略了。
发表评论
-
浅析Static用法解析java语言
2013-05-08 10:32 765在类中定义的数据成为 ... -
httpclient报异常
2013-03-17 21:14 3313Exception in thread "main& ... -
(转载)java synchronized详解
2013-01-25 10:44 745java synchronized详解 记下来,很重要。 ... -
JDBC Connection接口实现ResultSet的方法
2013-01-24 15:27 1121JDBC Connection接口实现Resu ... -
基于JDBC的数据库连接池高效管理策略
2013-01-24 08:43 716基于JDBC的数据库连接池高效管理策略 发布时间:2 ... -
关于一个大型WEB系统架构设计和技术选型的讨论摘录
2013-01-23 09:06 957关于一个大型WEB系统架 ... -
技术选型(转)
2013-01-22 21:41 774博客分类: Java SpringHi ... -
HTTP Status 405 - HTTP method GET is not supported by this URL
2012-11-30 13:25 1334出现错误的原因: 1,继承HttpServlet的Ser ... -
JVM内存资源耗尽,有解决方案吗?
2012-09-24 09:09 931去了趟sun,知道为什么了,heap,stack都有大小限制. ... -
转载 :网站并发测试工具
2012-09-21 09:33 915转载 :网站并发测试工 ... -
获取客户端Ip地址网上方案总结
2012-09-09 11:03 1067客户端: <script language=" ... -
对象与JSON之间的转换
2012-09-04 10:13 895JSON-lib这个Java类包用于把bean,map和XML ... -
调用JSONArray.fromObject(stss)出现java.lang.reflect.InvocationTargetException错误
2012-09-03 12:01 3694调用JSONArray.fromObject(stss)出现j ... -
Socket用法详解-----转载
2012-08-24 09:22 1580Socket用法详解 原文:ht ... -
数据结构与算法——数组实现Stack代码
2012-08-17 20:33 860package com.part02; publ ... -
数据结构与算法——简单排序
2012-08-14 21:13 813public class Sort { //存值 ... -
EL表达式取值
2012-07-23 16:55 1407EL表达式取值 1.EL表达式的语法格式很简单: 以前 ... -
Java基础学习------Vector类
2012-07-16 09:47 934一、定义 Vector 类可 ... -
Java基础学习------字符串、String类、StringBuffer类、StringBuilder类总结
2012-07-14 15:09 920一、定义: 字符串是字符的序列、它可以包含字母、数字和其 ... -
java字符串与整数之间的互相转换
2012-07-12 09:32 1590java字符串与整数之间的互相转换 1、如何将字符串S ...
相关推荐
how tomcat work 中文版 how tomcat work 中文版 how tomcat work 中文版
how tomcat work 中文版pdf 还有源码可以看啊(中文名为 深度剖析tomcat)
通过本书可以学习了解web服务器(tomcat)的工作原理,之前提交的文档没有代码,这次的附上tomcat的章节源码。
How Tomcat Work中文版高清pdf文件,教你学习tomcat是如何实现的
NULL 博文链接:https://com0606.iteye.com/blog/1045568
How Tomcat Work 源代码,对于了解tomcat工作机制非常有帮助。
How Tomcat Work 第一章 实例应用 书上的例子的实现
How Tomcat Work 第二章(含第一章) 实例应用
提供How tomcat works 电子书及源码很好,很详细。学习web的必备之选。
学习tomcat源码+英文《How Tomcat Work》和每一章的相关项目+tomcat6源码依赖jar+还有学习tomcat的一点笔记
tomcat工作原理深入详解——HowTomcatWorks中文版.pdf
How Tomcat Work Source
<<How Tomcat work>>书籍里的应用代码,有很多的实用设计与原理
How Tomcat Works【英文PDF+中文HTML+源码】 How Tomcat Works 主要是讲解Tomcat如何运行的一些核心资料。
How Tomcat Works中文版
英文版how tomcat to work,深入了解tomcat不错资料!
How Tomcat Works 中文版+源码+书里面对应tomcat源码(4.1.12 5.0.18)和编译后文件
How Tomcat Works 中文版+例程源码; 源码在src目录下