您的位置:首页 > 理论基础 > 计算机网络

2009-04-17读书记录:《Servlet与JSP核心编程》第七章——HTTP响应报头

2009-04-17 22:36 435 查看
在状态代码中有介绍过Http响应的报头:一般由一个状态行、一些响应报头、一个空行和一些相应的文档构成。这一章中是详细的介绍。感觉大部分都是概念性的东西,一半以上都是需要记忆的,不过使用的多了就自然记住了。

前面提到过设置报头的方法:setHeader(String headerName, String headerValue);但HttpServletRequest提供了几个简便的方法,如下:

setContentType(String mineType)

setContentLength(int length)

addCookie(Cookie c)

sendRedirect(String address)

这些方法应该不用介绍光看名字都知道是设置哪个报头了。

书中提到一点要注意的是:有些浏览器只支持HTTP1.0,所以在使用HTTP1.1专有的报头前要使用request.getRequestProtocol明确地检查HTTP的版本。但现在的浏览器无论主流还是非主流都支持HTTP1.1了!报头详细介绍:

Allow:指定服务器支持的请求方法,405(Method Not Allowed)响应需要用到这个报头

Cache-Control:告诉浏览器或其它用户什么环境可以安全地缓存文档,可取值为:
public——文档可以缓存
private——文档只适于单个用户,只能存储在私有缓存中
no-cache——文档不能被缓存,即不能用来满足后面的请求
no-store——不缓存文本,甚至不能缓存至磁盘上的临时目录中
must-revalidate——每次使用文档时,客户程序都必须联系原来的服务器
proxy-revalidate——除了只适用于共享缓存,这个报头和must-revalidate相同
max-age=xxx——xxx秒之后,将文档认作
s-max-age=xxx——共享缓存在xxx秒后将该文件认作失效

Connection:响应报头的close值,指示浏览器不要使用持续性HTTP请求

Content-Disposition:要求浏览器询问用户,将响应存储在磁盘上给定名称的文件中(另存为),用法:
Content-Disposition:attachment;
filename=input_name;

Content-Encoding:标明在传输过程中所使用的编码方式

Content-Language:表示文档所使用的语言

Content-Length:标明响应中的字节数

Content-Type:给出响应文档的MIME(Multipurpose Internet Mail Extension 多用网络邮件扩展)类型

Expires:规定内容的过期时间,从而不再需要继续缓存

Last-Modified:标明文件最后的修改时间(十分有用的报头)

Location:状态代码在300~399之间的所有响应都要包含这个报头,通知浏览器文档的地址

Pragmake:在http1.0中提供这个报头并设置值为no-cache指示客户不再缓存,1.1使用Catch-Control:no-cache更为可靠

Refresh:标明浏览器在XX秒后刷新,response.setIntHeader("Refresh",30);

Retry-After:和503(Service Unavailable)响应结合使用,告诉客户端程序多久后可以重复它的请求

Set-Cookie:指定一个与页面相关的Cookie。每个Cookie都要求一个单独的Set-Cookie报头

WWW-Authenticate:和401(Unauthorized)状态代码一起出现,告之浏览器客户应该在Authorization报头中提供哪种验证类型(BASIC或DIGEST)和域

常见的MIME格式:

application/msword —— Microsoft Word文档

application/vnd.ms-excel ——Excel电子表格

application/zip —— Zip文件

text/html —— html文档

text/plain —— 纯文本

text/xml —— XML

Servlet创建Excel文档:

SUM就Excel中求和的函数(早就知道Excel很强大,可以做很多事情,但我对这个还是没啥兴趣:P)

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String strType;
strType = "application/vnd.ms-excel";
//strType = "application/msword";
//strType = "application/zip";
response.setContentType(strType);
PrintWriter out = response.getWriter();
out.println("/tQ1/tQ2/tQ3/tQ4/tTotal");
out.println("Apples/t78/t87/t92/t29/t=SUM(B2:E2)");
out.println("Orange/t77/t86/t93/t30/t=SUM(B3:E3)");
}


跨请求存储数据的方式:

对于不专属于任何用户的数据,可以将其存储在Servlet的字段(实例变量)中。对于专属用户的数据,可以将其存放在HttpSession对象中。对于其它Servlet和JSP页面需要调用到的数据,可以将它存储到ServletContext中。

请求发送给用户之后,保持运算继续进行的方式

只需要启动一个线程,系统为了答应请求而启动线程,在响应完成之后自动结束,但其它的线程会继续保持运行。惟一的差别是,要将线程的优先级设为较低的值,这样才不至于影响整个服务的运行。

更新的结果就绪后,使浏览器得到它的方式

指示浏览器请求更新,这就是Refresh响应报头的用途。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐