1. HttpServletResponse简介

  Web服务器回送给Web客户端的HTTP响应消息分为三个部分:状态行,响应消息头,响应体. Servlet API中定义了ServletResponse接口用于创建响应消息,Servlet程序通过调用ServletResponse对象的方法可以向客户端回送基本的响应消息. HttpServletResponse是专用于HTTP协议的ServletResponse子接口,它用于封装HTTP响应消息,允许操作HTTP协议相关数据,包括响应头和状态码,支持Cookies和Session跟踪. HttpServletResponse也定义了一系列用于描述各种 HTTP状态码的常量.

  对于一个Servlet的每次访问请求,Servlet引擎都会创建一个用于封装HTTP请求消息的对象和一个代表HTTP响应消息的对象,然后调用此Servlet对象的service方法,并将这两个对象作为参数传递给该方法. 其中,作为参数传递进来的响应消息就是HttpServletResponse对象,在service方法内部可以调用它的各种方法来创建响应消息.

2. 产生响应状态行

  HTTP响应消息的响应状态可分为三个部分:HTTP版本,状态代码和一条相关的提示信息,如下所示:

    HTTP/1.1 200 OK

  HttpServletResponse中定义了几个用于产生HTTP消息的响应状态行的方法和对应各个响应状态码的常量.

2.1 状态码常量

  计算机里只有数值,计算机里的一切都是用数值表示的,数值可以代表任何意义,但是,如果在程序代码中直接使用数值,显然不如使用英文单词那么直观和容易记忆,即用一个英文单词定义为一个数值,在要使用到该数值的地方,用已定义的响应英文单词来替换,这些英文单词就被称之为常量.

  在一般情况下使用常量来表示数值,可以使用程序代码易读易写. HTTPServletResponse中定义了若干与状态码数值对应的常量,每个常量的名称以前缀SC(State Code)开头,显然是HTTP1.1规范中所表示的状态信息的英文单词的组合,每个单词之间用下划线连接,切所有字母都大写.

2.2 常用方法

  setStatus方法:  用于设置HTTP响应消息的状态码,并生成响应 状态行.

  sendError方法:  用于发送表示错误信息的状态码(一般是404)

3. 构建响应消息头

  HttpServletRequest和HttpServletResponse接口中定义了若干用于产生HTTP响应消息中的头字段的方法,其中,addHeader和setHander方法是两个通用的方法,可用于设置所有的的头字段. 除了这两个方法外,HttpServletResponse还定义了一些其他便利的方法,如:setContentType,setContentType,setIntHeader,setDateHeader等方法,用来设置那些常用或有日期,整数数据的响应头.

  通过服务器响应给客户端一些头信息,可以让浏览器执行 一些特殊功能,例如禁止浏览器刷新,让浏览器停留几秒后刷新等.要想利用HTTP响应头字段来实现一些特殊功能,必须了解 响应头字段有哪些作用及具体用法.

3.1 常用方法

3.1.1 addHeader和setHander方法

  addHeader和setHander方法都可以设置HTTP响应消息的各种头字段,他们的语法定义如下:

public void addHeader(String name,String value)
public void setHander(String name,String value)

   其中的第一个参数为响应头的字段名,第二个参数为字段取值.  这两个方法都是增加一个新的头字段.其中,如果已经设置过同名的头字段,setHander方法将用新的设置值取代原来的设置值,而addHeander方法则是增加一个同名的响应头. HTTP响应消息中允许统一名称的头字段出现多次,addHeander方法正好可用于在消息头中生成要出现次数的头字段.这两个方法很简单,但要想充分有效的利用好这两个方法,还必须要好好掌握各个响应头的作用.

3.1.2 addIntHeader与setIntHeader方法

  HttpServletResponse提供了两个专门用于设置包含整数值的响应头的方法,他们定义语法如下:

pubilc void addIntHeader(String name,int value)
public void setIntHeader(String name,int value)

3.1.3 addDateHeader与setDateHeander方法

  HttpSerlvetResponse提供了两个专门用于设置包含日期值的响应头方法,他们定义语法如下:

public void addDateHeader(String name,Date value)
public void setDateHeader(String name,Date value)

3.1.4 setContentLength方法

  setContentLength方法用于设置响应消息的响应体的大小,单位为字节. 对于HTTP协议来说,这个方法就就是设置Content-Length响应头的值.

3.1.5 setContentType方法

  setContentType方法用于设置Servlet输出内容的MIME类型,对于HTTP协议来说,就是设置Content-Type响应头的值.

3.1.6 setCharacterEncoding方法

  此方法用于设置输出内容的编码方式,对于HTTP协议来说,就是设置HTTP-ContentType头字段中的字符集编码部分.注意:此方法比setContentType和setLocal方法的优先权高,它的设置结果覆盖setContentType和setLocal方法所设置的字符集编码.

4. 响应头的两个练习

4.1 利用响应头实现2秒后跳转页面

  Http协议中定义了一个refresh头字段,用于告诉浏览器过多少秒后自动刷新页面. 在Refresh头字段的时间设置值后面还可以用分号(;)分隔后,再指定一个URL地址,这将浏览器在指定的时间值后自动去访问该URL地址指向的资源.

  1. 在Servlet的service方法中写入如下代码:

    protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setHeader("Refresh", "2;http://www.baidu.com");
}

  2.然后部署到tomcat并启动服务器

  3.在浏览器访问此Servlet

4.2 禁止浏览器缓存

  为了提高网页的访问效率,浏览器可以在本地缓存以前访问过的页面,当路蓝旗再次访问那些已经缓存了的页面时,浏览器就不用再去请求远程服务器了,而直接从本地读取出来展示就可以了. 缓存提高了浏览器访问效率,但有时也会带来负面效果,那就是服务端的内容变化不能被实时反应到客户端,因此就需要手动禁止浏览器缓存. 有三个响应头都可以禁止浏览器缓存,如下:

protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setHeader("Expires", "0");
resp.setHeader("cache-control", "no-catch");
resp.setHeader("pragma", "no-catch");
}

  由于不是所有浏览器都能完全支持上面这三个响应头,因此最好是同时使用上面的三个响应头,只要浏览器能支持其中任何一种,就能可靠的禁止浏览器缓存当前页面.

5. 使用meta标签模拟响应消息头

  利用HTTP消息的响应头字段, 可以让浏览器完成各种有用的功能, 但是, 这需要通过编写 Web服务器端的程序来实现。 如果不会服务器端编程的普通HTML 页面制作者也想借助HTTP 消息的响应头字段来实现一些特殊功能,他们该怎么办呢?为此, HTML语言中专门定义了<meta>标签的 http-equiv属性来在HTML 文档中棋拟HTTP响应消息头,当浏览器读取到 HTML 文档中具有 http-equiv属性的<meta>标签时,它会用与处理 Web服务器发送的响应消息头一样的方式来进行处理。这样,静态HTML页面的制作者不用编写 Web服务器端的程序, 就可以在静态HTML 页面中实现HTTP 响应消息头的功能了 。例如, 如果不想让浏览器缓存一个内容经常要被更新的静态HTML页面, 那么可以在它的<head></head>标签对之间增加如下三条<meta>语句:

 <head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>

JavaWeb开发之HttpServletResponse的更多相关文章

  1. JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(上)(各种乱码、验证码、重定向和转发)

    HttpServletResponse简介 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 request和re ...

  2. JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)

    HttpServletRequest获取请求头信息  (1)获取客户机请求头 String getHeader(String name) Enumeration<String> getHe ...

  3. JavaWeb开发之Servlet

    1. Servlet有关概念和前置知识 1.1 什么是动态网页 如果浏览器在不同时刻或不同条件下访问web服务器上的某个页面,浏览器所获得的页面内容可以发生变化,那么这个页面就称之为动态页面. 动态网 ...

  4. JAVAWEB开发之JSTL标签库的使用、 自己定义EL函数、自己定义标签(带属性的、带标签体的)

    JSTL  JSTL简单介绍: JSTL的全称:JSP Standard Tag Library,JSP标准标签库 JSTL的作用:   提供给Java Web开发者一个标准通用的标签函数库   和E ...

  5. JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用

    Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...

  6. JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解

    Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) ...

  7. javaweb开发之jsp

    一.WEB应用的目录结构 通常我们是在IDE中创建web应用程序,IDE自动为我们实现了WEB的目录结构,下面来看如何徒手创建一个WEB程序. 首先来看一下Tomcat自带的一个web应用的目录结构 ...

  8. Javaweb开发之路

    本文作者:DavidLin 欢迎转载,但请保留文章原始出处→_→ 本文地址:http://www.cnblogs.com/univeryinli/p/programming-skill-yinli.h ...

  9. javaweb开发之get与post请求的区别

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...

随机推荐

  1. Java面试05|MySQL及InnoDB引擎

    1.InnoDB引擎索引 InnoDB支持的索引有以下几种: (1)哈希索引 (2)全文索引 (1)B+树索引 又可以分为聚集索引与辅助索引 索引的创建可以在CREATE TABLE语句中进行,也可以 ...

  2. 1572: [Usaco2009 Open]工作安排Job

    1572: [Usaco2009 Open]工作安排Job Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 814  Solved: 365[Submit ...

  3. iOS项目之同时点击多个按钮解决方案

    自己的项目完成后,在测试中出现了一个情况,同时点击界面中的多个按钮,会跳转多个界面.然后又看了看别的app,发现也有这样的情况, 如图 上面是我手机上美团app的截图,上面的分类同时选择多个时,只能跳 ...

  4. dreamweaver破解版下载地址

    dreamweaver CC 2015可以在可视化环境中设计的你网页,非常方便高效完成网页设计.Adobe Dreamweaver CC 2015支持CSS编辑器.和jQuery库代码自动完成功能等等 ...

  5. js 的DOM操作 2017-03-21

    DOM(document object model) 文档对象模型 BOM(browse object model) 针对浏览器(如:弹出的窗口,滚动条等) 一.操作对象(注意大小写:注意elemen ...

  6. 【G】开源的分布式部署解决方案文档 - 手动安装

    G.系列导航 [G]开源的分布式部署解决方案 - 导航 序言 因各种原因,决定先写使用文档.也证明下项目没有太监.至于安装过程复杂,是因为还没有做一键安装,这个现阶段确实没精力. 项目进度 (点击图片 ...

  7. Android开发之AChartEngine的使用

    下面附上代码加注解 package com.example.com.my_achartnegine; import android.content.Context; import android.gr ...

  8. bing翻译API调用方法

    概述 前一段时间,遇到一个需求,需要对文章进行翻译,由于客户公司员工有国内的人员,也有国外的人员,为了照顾国外的同事,客户提出,当用户在手机端发布帖子,需要同时把帖子的内容翻译成英文,方便用户阅读.于 ...

  9. Node.js 基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  10. mac下重启apach

    打开终端 重启apache:sudo /usr/sbin/apachectl restart 关闭apache:sudo /usr/sbin/apachectl stop 开启apache:sudo ...