测试之路,与你同行!

处理HTTP报头-Servlet学习笔记四

上一篇 / 下一篇  2012-02-26 17:51:06 / 个人分类:Servlet

HTTP请求建立在请求(request)和相应(response)的基础之上。在客户端浏览器向服务器发送请求的时候,除了用户输入的表单数据或者查询数据之外,通常浏览器还会自己在GET/POST请求行后面加上一些附加的信息;而服务器向客户端的请求作出响应的时候,也会自动向客户端发送一些附加的信息。通常我们将这些信息称为HTTP报头,将附加在请求信息后面的称为HTTP请求报头,将附加在响应后的信息称为HTTP响应报头。通过Servlet,我们可以获得请求报头信息,或者可以通过Servlet来设置响应报头信息。
1、在Servlet中取得HTTP请求报头
HttpServletRequest的getHeader()方法来获得对应的HTTP请求报头,只需要给这个方法传递一个HTTP报头的String参数就可以了。
HTTP请求报头以及各自含义:
Accept:浏览器可接受的MIME类型。 Servlet检查Accept来确定使用哪种格式返回给客户端资源。     IE6和7 bug:重新载入页面发送的Accept报头不正确,但在最初的请求中是正确的。  

            Accept-Charset:浏览器可接受的字符集。   

            Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。 Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。      在使用任何类型的内容编码之前,一定要检查Accept-Dncoding报头。   

           Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。   

            Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。

           Connection:表示是否需要持久连接。   如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),  它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。    要 实现这一点,Servlet需要在应答中发送一个Content-Length头,  最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。   

           Content-Length:表示请求消息正文的长度。    

           Cookie:这是最重要的请求头信息之一。    

           From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 

            Host:初始URL中的主机和端口。    

           If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。    

           Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。    

           Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。    

           User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。      在不要的时候才使用User-Agent。      在使用的时候要检查是否为null。      区分Netscape和IE 要检查MSIE 而非"Mozilla"。      这个报头可以加造而servlet并不能区分这种情况。 

           UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。        有关HTTP头完整、详细的说明,请参见http://www.w3.org/Protocols/的HTTP规范。  

取得请求头信息的方法有:

GetHeader()

getHeaderNames()

2、在Servlet中设置HTTP响应头

响应头信息:

Content-Encoding:页面在传输过程中的编码方式

Content-Type:设置Servlet输出的MIME类型

Content-Language:表明页面所使用的语言,如en\en-us等

Expires:标明页面的过期时间,可以使用这个来在指定的时间内取消页面缓存

Refresh:表明浏览器自动重新调用最新的页面

设置HTTP响应头的方法:

setHeader(String headerName,String headerValue)

setContentType(String mime)

setContentLength(int length)

addCookie(Cookie c)

sendRedirect(String url)设置Servlet跳转到指定的url

3、在Servlet中跳转到其他的页面

假设Servlet处理用户登录的情况,如果为合法用户,跳转到A页面,否则跳转到B页面。在Servlet中,可以使用HttpServletResponse的sendRedirect()方法实现跳转这个功能,这个方法接收一个参数,用于指定跳转的URL。当调用sendRedirect()时,WEB服务器将会向浏览器返回响应,指示浏览器请求新的URL。因为浏览器会重新提出新的请求,所以在跳转之前所存储的所有的请求属性都会被清空。

....

public class Redirect extends HttpServlet{

public void doGet(HttpSevletRequest request,HttpServletResponse response){

if(request.getParameter("Dir").equals("login"))

response.sendRedirect("../login.htm");

else

response.sendRedirect("chop03.img");

}

...

除了使用sendRedirect()方法实现跳转之外,还可以使用RequestDispatcher对象的forward()方法来实现类似的功能,这个方法需要接收两个参数:HttpServletRequest和HttpServletResponse,并且将封装在其中的属性传递到跳转的页面。


TAG:

 

评分:0

我来说两句

Open Toolbar