servlet和jsp核心编程(第2版)第五章客户请求的处理:HTTP请求报头学习笔记

[size=x-large]第五章[/size]客户请求的处理:HTTP请求报头
[size=x-large]核心方法[/size]:
[size=medium]1[/size].在使用request.getHeader返回结果之前,一定要确保它不是null。
[size=medium]2[/size].对于篇幅较长的文本页面,Gzip压缩可以极大第降低下载时间。
[size=x-large]学习笔记[/size]:
[size=large]一[/size]、请求报头的读取:[size=medium]1[/size].调用HttpServletRequest的getHeader方法。在Http1.1中,只有Host是必需的。因而,在使用请求报头之前一定要检查是否为null。
请求的格式为:
<request line>
<header line>
<blank line>
[<request body>]
具体例子可参见 [url]http://wenku.baidu.com/view/31d9151a6bd97f192279e9d7.html[/url]
每种请求报头可见[url]http://www.iteye.com/topic/563082[/url]
[size=medium]2[/size].报头名称对大小写不敏感,尽管getHeader是读取输入报头的通用方式,但由于几种报头的应用太过普遍,故而HttpServletRequest为他们提供了专门的访问方法。
比如:getCookies,getAuthType,getRemoteUser;getContentLength,getContentType,getDateHeader,getIntHeader,getHeaders(返回一个Enumeration),getMethod,getRequestURI,getQueryString,getProtocol
[size=large]二[/size]、枚举报头:
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements){
String headerName = (String)headerNames.nextElement();
out.println(headerName+":"+request.getHeader(headerName));
}

[size=large]三[/size]、了解HTTP1.1 请求报头
[size=large]四[/size]、发送压缩的web页面。
package coreservlets.beans;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.zip.GZIPOutputStream;
import java.io.IOException;
public class GzipUtilities {
public static boolean isGzipSupport(HttpServletRequest request){
boolean flag = false;
String acceptEncoding = request.getHeader("Accept-Encoding");
if(acceptEncoding!=null&&acceptEncoding.indexOf("gzip")!=-1){
flag = true;
}
return flag;
}
public static boolean isGzipDisabled(HttpServletRequest request){
boolean flag = false;
String param = request.getParameter("gzip");
if(param!=null&&!param.equalsIgnoreCase("false")){
flag = true;
}
return flag;
}
public static PrintWriter getGzipWriter(HttpServletResponse response) throws IOException{
return new PrintWriter(new GZIPOutputStream(response.getOutputStream()));
}
}

[size=large]五[/size]、区分不同的浏览器类型。
User-Agent 报头标示发出请求的具体浏览器。注意:[size=medium]1[/size].仅在必要时使用User-Agent,[size=medium]2[/size].检查是否为null,[size=medium]3[/size].区分Netscape和IE,要检查“MSIE”,而非“Mozilla”。
String header = request.getHeader("User-Agent");
String title;
if(header!=null&&header.indexOf("MSIE")!=-1){
title = "This is IE ;";
}else{
title = "This is Netscape;";
}

[size=large]六[/size]、依据客户的到达方式定制页面
通过Referer报头,我们可以根据用户如何到达某个页面,对页面进行定制。这个Referer报头指出,用户单击连接到达当前页面时

所处的页面的位置,如果用户直接输入页面的地址,就不会发送这个Referer

String referer = request.getHeader("Referer");
if(referer==null){
doSomething();
}
if(referer.index("JRun")!=-1){
doSomething();
}else if(referer.index("Resin")!=-1){
doSomething();
}else{
doSomething();
}

[size=large]七[/size]、标准CGI变量的访问。CGI,传统公共网关接口(Common Gateway Interface),在物理上是一段程序,运行在服务器上,

提供同客户端HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。

留言本的工作是这样的:先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下“留言”(到目前为止工作都在客

户端),浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本

例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览

器里将看到“留言结束”的字样。整个过程结束。
尽管将不同的数据来源区分对待会更有意义些,但我们得到每个CGI变量在servlet中的等价物更为有用,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值