第2章 HTTP和Servlet的基础知识让我们从定义Web应用程序这一章开始。
我们都看到过一般的客户端应用软件,但怎么样才是一个真正的Web应用程序?然而,它可以被定义为一个用于用户接入的运行在服务器上的程序,通过一个简单,一般用途的客户。
今天,最常见的客户端是一种运行在pc机上的网页浏览器或工作站系统,但其他类型的用户正在迅速加入,如无线PDA ,手机,和其他专门设备。
最崇高目标是从你面前的任何类型的设备上获得你所要的信息和服务。
这意味着同样的简单客户端程序必须能够与许多不同的服务器应用通话,以及应用程序必须能够适用于许多不同类型的客户。
为了满足这一需要,必须制定详细的客户端和服务器相互通信的协义。
这正是超文本传输协议( HTTP )的目的。
通信模型所确定的HTTP形式的基础,所有的Web应用程序设计。
基本了解HTTP的关键应用,适合发展中国家的限制范围内的协议,无论哪个服务器端技术的使用。
在本章中,我们看一下最重要的细节的HTTP您需要了解作为一个Web 应用程序开发。
另外一个项目:这本书是用JSP作为服务器端技术。
JSP技术是基于Java Servlet技术。
这两种技术有着大量的术语和概念,所以知道一点servlets将帮助你,即使你开发纯JSP的应用。
要真正理解和使用的全部的JSP ,你需要知道一点servlets 。
因此,我们期待在servlet的基本入在最后一章的这一节。
2.1 HTTP请求/响应模型所有扩展HTTP和基于HTTP协议是基于一个非常简单的通信模式。
其工作原理如下:客户端,通常是一个Web浏览器,发出了一个请求资源的服务器,服务器发回的响应相应的资源(或响应的错误信息,如果它不能处理请求出于某种原因)。
A资源是一些事情的数据,如一个简单的HTML文件逐字返回到浏览器或程序,动态生成的响应。
这种简单的模式意味着三个重要的事实你需要了解:HTTP是一种无状态协议。
这意味着服务器不保留任何信息发出后客户端的反应,因此,它不能承认,多请求来自同一客户端可能有亲缘关系。
Web应用程序无法轻易地提供什么样的即时反馈信息中常见的独立的图形用户界面应用程序,如文字处理机或传统客户机/服务器应用程序。
每当它们之间的互动客户端和服务器需要一个请求/响应交流时。
执行请求/响应交流当用户选择一个项目在一个列表框或填写表单元素通常是过于繁重的带宽提供给大多数的互联网用户。
这里没有什么协义告诉服务器如何提出要求;因此,服务器无法在客户端上区分各种方法触发的要求。
例如,不允许HTTP Web服务器来区分一个明确的要求所造成的点击一个链接或提交表单和一个隐含的要求所造成的调整浏览器窗口或使用浏览器的后退按钮。
此外,超文本传输协定不包含任何手段服务器调用客户端的特定职能,例如回去在浏览器历史记录列表或发送的反应在一定范围内。
另外,服务器无法检测什么时候用户关闭浏览器。
多年来,人们已经制定了各种技巧来克服务第一个问题;HTTP的无国籍性。
其他两个问题,没有及时反馈,也没有详细说明如何提出要求,更难处理,但有些金额的互动,才能实现所产生的反应,其中包括客户端代码(代码执行的浏览器),如JavaScript或Java小程序。
2.1.1 详叙Requests让我们仔细看看Requests。
用户发送请求到服务器,通过点击一个链接的网页上,提交表单时,或输入一个网页地址在浏览器的地址栏。
发送请求后,浏览器需要知道与哪些服务器交换数据,并要求得到资源。
URL必须跟据服务器名详细描术端口号 ,例如:/index.html第一部分所显示的URL中指定的Requests是使用HTTP协议的。
其次是服务器的名称,在这种情况下 。
Web服务器等待请求将在某一特定的TCP / IP端口。
端口号80是标准端口,用于HTTP请求。
如果Web 服务器使用另一个端口,URL必须跟据服务器名称指定端口号。
例如::8080/index.html这一请求被发送到一台服务器,使用端口8080而不是80 。
最后部分的URL ,/ index.html,确定了客户端请求的资源。
网址实际上是一个专业化的统一资源标识符( URI ,所界定的符合RFC - 2396规格)。
URl跟据地址确定部份资源,例如服务器,其中包含的资源。
另一种类型的URI是一个统一资源名称(URN),这是一个全局唯一标识符,无论在什么地方都有效的资源的位置。
HTTP只处理URL的不同。
该条款的URI和URL 常常被互换,不幸的是,他们有不同的定义略有不同的规格。
我试图使用条款所界定的HTTP/1.1规范(符合RFC - 2616年),这是相当接近,以他们是如何也用在Servlet和JSP规范。
因此,我只有当URI以http开头时才使用的term URl (或https ,为HTTP加密连线),其次是服务器名称,并可能有一个端口号,如以前的例子。
我使用的URI作为一个通用术语的任何字符串,确定了资源,确定位置可以从上下文而不耍要URI。
例如,当请求已被交付给服务器,位置已经定确,只有资源标识符是很重要的。
浏览器使用URL信息创造的请求消息使用指定的协议发送到指定的服务器。
HTTP请求消息由三部份组成:一个请求行,请求标头,请求体。
请求行以方法名称的开头,随后进行了资源标识符和协议版本所使用的浏览器:GET / index.html HTTP/1.1最常用的方法是GET。
顾名思义, GET请求用于从服务器检索资源。
这是默认的请求方法,因此,如果您输入网址在浏览器的地址栏,或者点击一个链接,发送的请求是作为一个GET请求到服务器。
标题要求提供额外的信息可以使用服务器来处理请求。
邮件正文是只包含在某些类型的requests,如POST请求以后讨论。
下面是一个例子,一个有效的HTTP请求消息:GET / index.html HTTP/1.1Host: 用户代理: Mozilla/5.0 (Windows; U; Win 9x 4.90; en-US; rv: 1.0.2)接受:image/gif, image/jpeg, image/pjpeg, image/png, */*接受语言:en接受字符:iso-8859-1,*,utf-8请求行指定的GET方法和要求的资源命名/ index.html使用HTTP/1.1协议返回。
不同的头提供不同的资料。
主机标头使用URL告诉服务器主机名。
服务器可能有多个名称,因此这一信息是用来区分多个虚拟的网络服务器共享相同的Web服务器进程。
user - agent标题包含有关类型的浏览器提出请求。
服务器可以用它来传送不同类型的反应,不同类型的浏览器。
例如,如果服务器知道是使用Internet Explorer或Netscape Navigator,它可以发出一个反应,充分利用每一个浏览器的独特功能。
它也可以判断客户端以外的HTML浏览器使用,如无线标记语言(标记语言)的浏览器的手机或PDA设备,并产生适当的反应。
请求头提供有关的语言和文件格式的浏览器。
这些标题可以用来适应不同功能的浏览器和不同的用户,如使用了一个受支持的图像格式和首选语言。
这些只是一小部分的标题中可以包含请求的信息。
资源标识符( URI ),并不一定对应于一个静态文件在服务器上。
它可以识别一个可执行的程序,记录在一个数据库中,或差不多任何Web服务器知道。
这就是通用术语资源的使用。
事实上,就没有办法判断/ index.html的通用资源识别符对应的文件还是其他什么东西,它只是一个名字,这意味着一些服务器。
Web服务器被配置为地图这些指定的名称对应指定的资源。
2.1.2 祥叙response当Web服务器收到请求,在URI的其础上决定,用配置信息来处理它。
它可以处理简单的HTML文件,也可以将申请转交给一些组成部分,负责相应的资源URI 。
这可能是一个程序使用的数据库信息,例如,动态生成一个适当的反应。
在浏览器没有差别时response是如何处理的;一切关心的就得到了答复。
在回复邮件看起来类似请求消息。
它包括三件事:一个状态行,响应头,和一个可选的反应机构。
下面是一个例子:HTTP/1.1 200 OKLast-Modified: Mon, 20 Dec 2002 23:26:42 GMTDate: Tue, 11 Jan 2003 20:52:40 GMTStatus: 200Content-Type: text/htmlServlet-Engine: Tomcat Web Server/5.0Content-Length: 59<html><body><h1>Hello World!</h1></body></html>状态行开头的名称协议,其次是状态代码,并有简短的描述状态代码。
在这里,状态代码是200 ,这意味着被执行的请求成功。
回应邮件标题就像请求消息。
在这个例子中,最后修改标题给出的日期和时间,资源最后修改。
该浏览器可以使用此信息作为一个时间戳在本地缓存;下一次用户要求这一资源,他可以向服务器发送它只要当它被更新,因为这是最后一次要求。
内容类型标头讲述了什么类型的浏览器的反应数据和身体包含的内容长度标题是多么大。
其他标题不言自明。
一个空行分隔标题的邮件正文。
在这里,内容体是一个简单的HTML网页:html><body><h1>Hello World!</h1></body></html>当然,人体可以包含一个更为复杂的HTML网页或任何其他类型的内容。
例如,请求可能会返回一个HTML页面的img要素。
当浏览器读取第一个反应时,并认为是img要素,它就发出了一个新的要求所确定的资源,往往是在平行。
服务器返回一个响应,每幅图像的要求,与内容类型标题告诉什么类型的影像(例如图片/ gif格式),体内含有字节构成的类型。
2.1.3请求参数除了URI和标题,一个请求消息可以包含更多信息的形式参数。
如果确定了的URI服务器端程序显示天气信息,例如,请求参数可以提供有关城市的用户希望看到一个预测。
电子商务的应用,开放的我们可能会确定一个程序,处理订单,与用户的客户数量和名单所要采购的物品转移作为参数。
参数可以发出两种方式之一:汇价上的URI形式的查询字符串或发出的一部分,请求邮件正文。
这是一个例子,一个网址的查询字串:/forecast?city=Hermosa+Beach&state=CA 查询字符串开始问号(?),由名称/值对分隔符号(&)。
这些名称和值必须是URL编码,也就是说,特殊字符,如空格,问号,符号,以及所有其他nonalphanumeric字符编码,以便它们不会混淆字符用于分离名称/值对和其他部分的URI 。