Servlet基础—客户请求的处理:http请求报头

本章研究以下内容:

1.HTTP请求报头的读取

2.构建所有的请求报头的表格

3.了解各种请求报头

4.压缩页面减少请求时间

5.区分不同的浏览器类型

6.依据客户的到达方式定制页面

7.标准CGI变量的访问


*注意

HTTP请求报头不等同于表单数据,表单数据的直接来源于用户的输入,对于get请求,这些数据是URL的一部分,对于POST请求,这些数据在单独的行中

相应的,HTTP请求报头由浏览器间接设定,并紧跟在初始的GET或者POST请求行之后发送。

eg:给出一个HTTP请求如下

某用户向位于http://www.somebookstore.com/servlet/Search的servlet提交书籍搜索请求产生的。

GET / servlet /Search?keyword = Servlets + jsp HTTP/1.1

Accept : image / gif , image 、jpg , */*

Accept - Encodeing : gzip

Connection : keep—alive

cookie : userID = id456789

Host : www.somebookestore .com

Referer : http://www.somebookstore.com/findbookes.html

User_Agent : Mozilla / 4.0 (compatible;MSIZE 6.0 ; WIndows NT 5.0)


1.请求报头的读取

调用HttpServletRequest的getHeader方法(*这是读取输入报头的通用方式)

eg: request.getHeader(“connection”);//注意,报头名称对大小写不敏感

尽管getHeader是读取输入报头的通用方式,但由于几种报头的应用太过于频繁,故而HttpServletRequest为他们提供了专门的访问方法

getCookies方法

getCookies方法返回的是Cookie报头的内容,这些内容在分析后存储在cookie对象构成的数组中。

getAuthType和getRemoteUser

getAuthType和getRemoteUser方法对Authorization报头进行拆分,分解它的各个构成部分

getContentType

getContentType方法返回的Content-Type报头的值(返回一个String值)

getContentLength

getContentLength方法返回Content-length报头的值(作为一个int值返回)

getDateHeader和getIntHeader

getDateHeader和getIntHeader方法读取指定的报头,然后分别将它们转化成Date和int值

getHeaderNames

除了查找特定的报头之外,还可以使用getHeaderNames方法得到一个Enumeration,枚举当前特定请求中所用的报头名称

getHeaders

大多数情况下,每个报头名称在请求中只出现一次,然而,报头偶尔也有出现多次的情况,每次出现取出各自的值,Accept-Language就是一个案例。你可以使用get

Headers获取一个Enumeration,枚举报头每次出现所对应的位置

最后除了查找请求的报头之外,您还可以获取主请求自身的信息,即:上面给出的例子的第一行的信息,同样使用的是HttpServletRequest中提供的方法

下面是对4中主要的方法的汇总:

getMethod

getMethod方法返回主请求方法(一般是GET或者是POST,单也可能是HEAD,PUT和DELETE)

getRequestURI 

getRequestURI方法返回URI中主机和端口之后,但是表单数据之前的部分。以URL:http://randomhost.com/servlet/search.BookSearch?subject=jsp为例

执行此方法返回的结果是:"/servlet/search.BookSearch"

getQueryString

getQueryString方法返回表单数据。同样以URL:http://randomhost.com/servlet/search.BookSearch?subject=jsp为例

执行此方法返回的结果是:“subject=jsp”

getProtocol

getProtocol方法返回请求行的第三部分,一般为:HTTP/1.0或者为HTTP/1.1

Servlet一般在指定专用于HTTP1.1的响应报头后之前检查getProtocol


2.制作所有请求报头的表格

3.了解HTTP1.0请求报头

对请求报头的访问,使得Servlet能够执行许多优化,并提供大量的特性,如果不能访问请求报头,要实现这些特性是不可能的。

Accept

这个报头指定了浏览器能或者其他的客户端程序能够处理的MIME类型。

那些能够以多种格式返回资源的servlet,可以检查Accept来确定应该使用那种格式。

eg:png格式的图片比gif格式的图片在压缩上具有一定的优势,但是不是所有的浏览器都支持png格式。如果您同时拥有同一种图像的两只格式,您的servlet可以调用request.getHeader(“Accept”);,检查image/png,如果找不到匹配项,则在生成的所有IMG元素中使用blah.png文件名。否则,就只能使用blah,gif

Accept-Charset

这个报头标明了浏览器可以使用的字符集(utf-8)

Accept-encodeing

这个报头详细的列出了客户端能够处理的编码类型,如果服务器接收到了这个报头,则可以自由的使用任何一种所列出的格式对页面进行编码(一般为了减低传输时间),同时发送Content-Encodeing相应报头来表明页面的编码方式。这个编码类型安全不同于实际文档的MIME类型(在Content-Type响应报头中指明),因为在浏览器确定如何处理这个内容之前这个编码的风格是保留的。从另一个方面说,如果使用的是浏览器不能理解的编码,则显示的编码也是不可理解的。因此,在使用任何类型的内容编码之前,一定要明确的检查Accept-Encodeing报头。gzip或compress是二种最常见的值

在返回页面之前对他们进行压缩是一项有价值的服务。因为,一般说来,花在解码上的开销要小于在传输时间上的节省。

Accept-Language

这个报头,在servlet能够以多种语言生成结果树,列出客户端程序首选的语言

Authorization

在访问密码保护时的web页面时,客户用这个报头来标志自己的身份。

Connetion

这个报头标明了客户是否能够处理持续的HTTP连接。持续性的连接允许客户或者其他练篮球在单个socket中读取多个文件(例如,HTML文i件及相关的几幅图像)

从而,节省协商几个独立连接的所需的开销。使用HTTP1,1请求时,持续性的连接是默认选项,如果使用旧式风格的连接,客户必须将这个包头的的值指定为持续性连接:servlet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值