《HTTP和Servlet的基础知识.doc》由会员分享,可在线阅读,更多相关《HTTP和Servlet的基础知识.doc(19页珍藏版)》请在金锄头文库上搜索。
1、作者:汉斯伯格斯登第2章 HTTP和Servlet的基础知识让我们从定义Web应用程序这一章开始。我们都经常看到客户端应用程序,但到底什么是Web应用程序?习惯上说,它可以被定义为在服务器上运行,通过一个简单的通用客户端的用户访问应用程序。今天,最常见的客户端是一个在PC或工作站的网络浏览器,但其他类型的客户正在迅速加入,如无线掌上电脑,手机,以及其他专业设备。这里的崇高目标是能够从任何设备访问到你所要的信息和服务。这意味着同样简单的客户端程序必须能够与许多不同的服务器应用通信,以及应用程序必须能够适用于许多不同类型的客户。为了满足这种需要,如何在客户端和服务器相互交谈,必须详细定义的协议。这
2、正是超文本传输协议(HTTP)的用途。通信模型所确定的HTTP形式的基础,所有的Web应用程序设计。基本了解HTTP的关键应用,适合发展中国家的限制范围内的协议,无论哪个服务器端技术的使用。在本章中,我们看一下最重要的细节的HTTP您需要了解作为一个Web应用程序开发。另外一个项目:这本书是关于使用作为服务器端技术的JSP。 JSP是基于Java Servlet技术。这两种技术有着很多的术语和概念,所以知道有关的servlet知识可以帮助你,即使你开发纯JSP应用程序。要真正理解并使用了JSP的全部功能,您需要了解一点servlet的知识。因此,我们期待在本章最后一节讲到的servlet的基础
3、。 2.1 HTTP请求/响应模型 所有扩展HTTP和基于HTTP协议是基于一个非常简单的通信模式。其工作原理如下:客户端,通常是一个Web浏览器,发出了一个请求资源的服务器,服务器发回的响应相应的资源(或响应的错误信息,如果它不能处理请求出于某种原因)。A资源是一些事情的数据,如一个简单的HTML文件逐字返回到浏览器或程序,动态生成的响应。这种简单的模式意味着你需要了解三个重要的事实:HTTP是一种无状态协议。这意味着服务器不保留任何信息发出后客户端的反应,因此,它不承认,多请求来自同一客户端可能有亲缘关系。Web应用程序无法轻易地提供即时反馈信息中常见的独立的图形用户界面应用程序,如文字处
4、理机或传统客户机/服务器应用程序。每当它们之间的互动客户端和服务器需要一个请求/响应交流时。执行请求/响应交流当用户选择一个项目在一个列表框或填写表单元素通常是过于繁重的带宽提供给大多数的互联网用户。这里没有什么协义告诉服务器如何提出请求,因此,服务器无法在客户端上区分各种方法触发的要求。例如,不允许HTTP Web服务器来区分一个明确的要求所造成的点击一个链接或提交表单和一个隐含的要求所造成的调整浏览器窗口或使用浏览器的后退按钮。此外,超文本传输协定不包含任何手段服务器调用客户端的特定职能,例如回去在浏览器历史记录列表或发送的反应在一定范围内。另外,服务器无法检测什么时候用户关闭浏览器。多年
5、来,人们已经制定了各种技巧来克服务第一个问题;HTTP的无国籍性。其他两个问题,没有及时反馈,也没有详细说明如何提出要求-这个更难处理,但是可以通过产生的反应来获取一些互动,这些反应包括客户端代码(代码执行的浏览器),如JavaScript或Java小程序。2.1.1 详叙Requests 让我们仔细看看Requests。用户发送请求到服务器,通过点击一个链接的网页上,提交表单时,或输入一个网页地址在浏览器的地址栏。发送请求后,浏览器需要知道与哪些服务器交换数据,并要求得到资源。URL必须跟据服务器名详细描术端口号,例如:http:/ / IP端口。端口号80是标准端口,用于HTTP请求。如果
6、Web服务器使用另一个端口,URL必须跟据服务器名称指定端口号。例如: http:/:8080/index.html这一请求被发送到一台服务器,使用端口8080而不是80。最后部分的URL / index.html,确定了客户端请求的资源。网址实际上是一个专业化的统一资源标识符( URI,所界定的符合RFC - 2396规格)。URI跟据地址确定部份资源,例如服务器,其中包含的资源。另一种类型的URI是一个统一资源名称(URN),这是一个全局唯一标识符,无论在什么地方都有效的资源的位置。HTTP只处理URL的不同。该条款的URI和URL常常被互换,不幸的是,他们有不同的定义略有不同的规格。我试
7、图使用条款所界定的HTTP/1.1规范(符合RFC - 2616年),这是相当接近,以他们是如何也用在servlet和JSP规范。因此,我只有当URI以http开头时才使用的term URI (或https ,为HTTP加密连线),其次是服务器名称,并可能有一个端口号,如以前的例子。我使用的URI作为一个通用术语的任何字符串,确定了资源,确定位置可以从上下文而不需要URI。例如,当请求已被交付给服务器,位置已经定确,只有资源标识符是很重要的。浏览器使用URL信息创造的请求消息使用指定的协议发送到指定的服务器。 HTTP请求消息由三部份组成:一个请求行,请求标头,请求体。请求行以方法名称的开头,
8、随后进行了资源标识符和协议版本所使用的浏览器: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
9、; 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 Explo
10、rer或Netscape Navigator,它可以发出一个反应,充分利用每一个浏览器的独特功能。它也可以判断客户端以外的HTML浏览器使用,如无线标记语言(标记语言)的浏览器的手机或PDA设备,并产生适当的反应。请求头提供有关的语言和文件格式的浏览器。这些标题可以用来适应不同功能的浏览器和不同的用户,如使用了一个受支持的图像格式和首选语言。这些只是一小部分的标题中可以包含请求的信息。资源标识符( URI ),并不一定对应于一个静态文件在服务器上。它可以识别一个可执行的程序,记录在一个数据库中,或差不多任何Web服务器知道。这就是通用术语资源的使用。事实上,就没有办法判断/ index.htm
11、l的通用资源识别符对应的文件还是其他什么东西,它只是一个名字,这意味着一些服务器。 Web服务器被配置为地图这些指定的名称对应指定的资源。2.1.2 祥叙response当Web服务器接收请求,它根据配置的信息,查看URI并且决定如何处理请求。它可以通过简单的内部处理从文件系统读取一个HTML文件,也可以提出请求的一些组件,它是对资源的URI相应责任。这可以是一个程序使用的数据库信息,例如,动态地生成一个适当的回应。若要浏览器中并没有要求是如何处理不同,它所关心的是得到一个回应。响应消息类似于请求信息。它包括:它包括三件事:一个状态行,响应头,和一个可选的反应机构。下面是一个例子: HTTP/
12、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 Hello World! 状态行始于该协议的名称,后跟一个状态代码和一个状态代码的简短说明。在这里,状态代码是200,这意味着请求成功执行。响应消息刚刚想请求消息头。在这个例子中,最后的修饰头给出了当资源的最后修改的日期和时间。该浏览器可以使
13、用本地缓存中的一个时间戳这一信息,下一次用户要求这一资源,他可以向服务器发送它只要当它被更新,因为这是最后一次要求。内容类型头告诉浏览器有什么反应的数据类型和主体包含内容长度头是多大。另一头是不言自明。一个空行分隔邮件正文的标题。在这里,主体是一个简单的HTML页: Hello World! 当然,人体可以包含一个更为复杂的HTML网页或任何其他类型的内容。例如,请求可能会返回一个HTML页面的img要素。当浏览器读取第一个反应时,并认为是img要素,它就发出了一个新的要求所确定的资源,往往是平行的。服务器返回一个响应,每幅图像的要求,与内容类型标题告诉什么类型的影像(例如图片/ gif格式)
14、,主体含有字节构成的类型。然后浏览器结合了所有的反应来呈现完整的页面。2.1.3请求参数 除了URI和标题,可以包含一个请求消息中的参数形式的补充资料。如果URI标识用于显示天气信息,例如,一个服务器端程序,请求参数可以提供有关城市的用户希望看到的一个预测信息。在一个电子商务应用程序,可以识别的URI与用户的客户数目程序处理订单,以及所购买的物品清单作为参数传送。 参数可以发送两种方式之一:上涨到URI的查询字符串的形式或作为请求发送邮件的正文部分。这是一个URL与查询字符串的例子: http:/ 查询字符串始于一个问号(?)和名称/值对字符分隔符号()。这些名称和值必须是URL编码,即特殊字符,如空格,问号,连字号,以及所有其他非字母数字字符的编码,使他们无法获得与使用单独的名称/值对和其他字符混淆部分的URI。在这个例子中,海滩和赫莫萨之间的空间被编码为一个加号。其他特殊字符被编码为对应的十六进制ASCII值,例如,一个问号编码为3F。当参数作为请求体的一部分发送,他们遵循相同的语法; URL编码的名称/值对由符号分隔。2.1.4请求方法如前所述,GET是最常用的请求方法,目的是获取,而不会造成任何其他发生在服务器上的资源。POST方法几乎是共同的GET,它请求服务器上的一些加工类,例如更新数据库或处理采购订单。参数之间的转移方式是GET和