在状态代码中有介绍过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响应报头的用途。

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

  1. jsp/servlet学习笔记(核心编程)mysql部分

    第十七章 访问JDBC (1)载入JDBC驱动程序 需要在Class.forName方法中指定数据库驱动程序的类型 try{ Class.forName("connect.jdbc.driv ...

  2. 读书 - Delphi下深入Windows核心编程 第二天

    技术交流,DH讲解. 今天进入这书第二章 钩子(HOOK). 先说说钩子是什么? 钩子其实就在你环境中加上一层过滤,在特殊情况下就触发钩子回调函数. 比如说我们安装了全局的键盘钩子,那么当我们按动键盘 ...

  3. Spring Boot 核心编程思想-第二部分-读书笔记

    怕什么真理无穷 进一步有近一步的欢喜 说明 本文是Spring Boot核心编程思想记录的笔记,书籍地址:Spring Boot编程思想(核心篇): 这篇文档会记录这本我的一些读书的思考,内容可能比较 ...

  4. Web基础之Servlet+JDBC+JSP项目实战记录(一)

    Web基础之Servlet+JDBC+JSP项目实战记录(一) 一.项目说明: 通过前面的学习,我们已经对Servlet有了一定的了解:接下来我们要结合数据库和JSP技术一步一步完成一个小型的动态we ...

  5. MySQL、JDBC、HTML、CSS、JavaScript、jQuery、tomcat、Http、Servlet、JSP、EL、JSTL、Maven、Cookie、Session(框架第一部分)

    第一章 MySQL 一 .数据库 1.什么是数据库? 所谓的数据库就是指存储和管理数据的仓库 2.数据库有哪些分类? 3.什么是关系型数据库? 底层以二维表的形式保存数据的库就是关系型数据库 stu- ...

  6. MyEclipse使用总结——修改MyEclipse默认的Servlet和jsp代码模板

    一.修改Servlet的默认模板代码 使用MyEclipse创建Servlet时,根据默认的Servlet模板生成的Servlet代码如下: 1 package gacl.servlet.study; ...

  7. 如何使用Servlet,JSP和MySQL将文件上传到数据库

    本教程显示了如何实现Java Web应用程序(使用Servlet和JSP),该Java Web应用程序将文件上传到服务器并将文件保存到数据库. 该应用程序采用以下技术: Servlet 3.0+:从S ...

  8. Eclipse使用总结——修改(My)Eclipse默认的Servlet和jsp代码模板

    一.修改Servlet的默认模板代码 使用MyEclipse创建Servlet时,根据默认的Servlet模板生成的Servlet代码如下: 1 package gacl.servlet.study; ...

  9. 修改(My)Eclipse默认的Servlet和jsp代码模板

    一.修改Servlet的默认模板代码 使用MyEclipse创建Servlet时,根据默认的Servlet模板生成的Servlet代码如下: 1 package gacl.servlet.study; ...

最新文章

  1. [数据结构]-散列表(哈希表)
  2. 大系统观:第2章 系统论概述
  3. [转]游戏中各种性能优化方法(不断更新)
  4. 工作328:uni-两个页面对象传递
  5. 权限表使用联合主键吗_天天写 order by,你知道Mysql底层执行流程吗?
  6. Spring Boot2 整合 Ehcache
  7. java如何给顺序表赋值_JAVA模拟新增顺序表及单链表
  8. c语言getch() 头文件,用getch()需要头文件吗?
  9. 卸载MySQL以及重装卡到Start Services的解决办法(亲测有效,刚重装成功)
  10. Oracle client 使用 .net程序连接 数据库时 出现 8.1.7 的解决办法
  11. 数字证书的基础知识(转)
  12. 基于人口普查数据的收入预测模型构建及比较分析(Python数据分析分类器模型实践)
  13. Opensource Licenses
  14. 11.3 作业 Problem L: 数字统计
  15. 数据结构与算法之美 | 别怕,有我!KMP 算法详解
  16. docker logs-查看docker容器日志
  17. JAVA毕业设计公立医院绩效考核系统计算机源码+lw文档+系统+调试部署+数据库
  18. 《自然语言处理实践——聊天机器人技术原理与应用》(王昊奋)简要笔记(全)
  19. ## 虚幻四引擎学习——初学者
  20. 已知四点经纬度位置计算球面面积

热门文章

  1. 第七篇:双管齐下,JVM内部优化与JVM性能调优
  2. armneon Intrinsics记录
  3. raptor累乘流程图_流程图(循环结构)4.ppt
  4. (转)把人类送上月球的女程序员:她的代码跟登月本身一般浪漫...
  5. mayavi安装踩坑: Building wheel for mayavi (setup.py) ...
  6. 【数据挖掘】-模型的评估(四)
  7. 【两次】基于win10搭建mask_rcnn环境,并跑通实验————分享经验
  8. 谷粒商城_01_环境搭建
  9. ZZULIOJ1028
  10. 【重读.转】黑客帝国哲学入门