HttpServletResponse  和 ServletResponse  都是接口
具体的类型对象是由Servlet容器传递过来

 
ServletResponse对象的功能分为以下四种:
        设置响应头信息;
        发送状态码;
        设置响应正文;
        重定向;
 

 
设置响应头信息
HttpServletResponse 中 (ServletResponse 中没有的)

void setHeader(String var1, String var2);

使用该方法设置的响应头最终会发送给客户端浏览器
示例:

response”);

设置content-type响应头,该头的作用是:
  1. 告诉浏览器响应内容为html类型,编码为utf-8。
  2. 而且同时会设置response的字符流编码为utf-8,即response.setCharaceterEncoding(“utf-8”);
自动跳转

response.setHeader("Refresh","5; URL=http://www.baidu.com");

5秒后自动跳转到百度。
 
 

 
发送状态码以及类型
 

response.setContentType("text/html;charset=utf-8");

//等同与调用response.setHeader(“content-type”, “text/html;charset=utf-8”);
 

response”);//设置字符响应流的字符编码为utf-8;

response);//设置状态码;

response, “您要查找的资源不存在”);//当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。

比如:
response.sendError(404, "您要查找的资源不存在了哈");
 
 

 
设置响应正文

ServletResponse是响应对象,向客户端输出响应正文(响应体)可以使用ServletResponse的响应流
repsonse一共提供了两个响应流对象:
        PrintWriter out = response.getWriter():获取字符流;
        ServletOutputStream out = response.getOutputStream():获取字节流;
两个方法都是ServletResponse的 HttpServletResponse继承而得到
 
注意:
  1. 当然,如果响应正文内容为字符,那么使用response.getWriter()
  2. 如果响应内容是字节,那么可以使用response.getOutputStream()  例如下载时
在一个请求中,不能同时使用这两个流!
也就是说,要么你使用repsonse.getWriter(),要么使用response.getOutputStream(),但不能同时使用这两个流。
不然会抛出IllegalStateException异常。
 
 
 
 
字符编码

在使用response.getWriter()时需要注意默认字符编码为ISO-8859-1,
如果希望设置字符流的字符编码为utf-8
可以使用
response.setCharaceterEncoding(“utf-8”)来设置。
这样可以保证输出给客户端的字符都是使用UTF-8编码的!
 
但客户端浏览器并不知道响应数据是什么编码的!
如果希望通知客户端使用UTF-8来解读响应数据,那么还是使用
response.setContentType("text/html;charset=utf-8")方法比较好
因为这个方法不只会调用response.setCharaceterEncoding(“utf-8”),还会设置content-type响应头
客户端浏览器会使用content-type头来解读响应数据。
 

 

缓冲区

response.getWriter()是PrintWriter类型,所以它有缓冲区,缓冲区的默认大小为8KB。

也就是说,在响应数据没有输出8KB之前,数据都是存放在缓冲区中,而不会立刻发送到客户端。

当Servlet执行结束后,服务器才会去刷新流,使缓冲区中的数据发送到客户端。

如果希望响应数据马上发送给客户端:

向流中写入大于8KB的数据;

调用response.flushBuffer()方法来手动刷新缓冲区;

 

重定向
 
当你访问A网址时,你会发现浏览器地址栏URL变成了B ,这就是重定向
所谓重定向,就是服务器重新定位你的方向,告诉你去别的地方
是再次的发出了请求,全程总共有两个请求
 
第一步就是设置响应码为302。
响应码为200表示响应成功,而响应码为302表示重定向,你需要告诉浏览器需要重定向

第二步设置重定向的URL

因为重定向是通知浏览器再第二个请求,所以浏览器需要知道第二个请求的URL

所以完成重定向的第二步是设置Location头,指定第二个请求的URL地址。

 
response.setStatus(302);
response.setHeader("Location", "https://www.cnblogs.com/noteless/");
你会发现地址栏立刻进行了跳转
 
重定向的简化方式:

response.sendRedirect("https://www.cnblogs.com/noteless/");
 
如果是在同一台服务器上也可以用相对路径  
response.sendRedirect("/servlet/ServletB");
 
效果同上
 
重定向注意点:
 
        重定向是两次请求;
        重定向的URL可以是其他应用,不局限于当前应用;
        重定向的响应头为302,并且必须要有Location响应头;
        重定向就不要再使用response.getWriter()或response.getOutputStream()输出数据,不然可能会出现异常;
 

 


 
 
 
 
 

HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码的更多相关文章

  1. HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码

    原文地址:HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码 HttpServletRespo ...

  2. 接口测试——HttpClient工具的https请求、代理设置、请求头设置、获取状态码和响应头

    目录 https请求 代理设置 请求头设置 获取状态码 接收响应头 https请求 https协议(Secure Hypertext Transfer Protocol) : 安全超文本传输协议, H ...

  3. 最全 HTTP 安全响应头设置指南

    销售“安全记分卡”的公司正在崛起,并已开始成为企业销售的一个因素.这些公司组合使用 HTTP 安全报头和 IP 信誉来进行评级.不过,在很大程度上,公司的得分取决于对外开放网站上设置的安全响应报头.本 ...

  4. Javaweb学习笔记——(十)——————response对象,response字符流缓冲器,响应头,状态码,重定向,requset对象,路径和乱码

    请求响应对象: request和response *当服务器接收都请求后,服务器会创建request和response对象,把请求数据封装到request对象中: *然后调用Servlet的sevic ...

  5. 设置请求头解决浏览器同源问题,ajx跨域获取cookie问题

    思想: 添加过滤器 设置请求头 代码如下 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.F ...

  6. SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...

  7. 原生js实现文件下载并设置请求头header

    原生js实现文件下载并设置请求头header const token="自行定义";//如果有 /** * 向指定路径发送下载请求 * @param{String} url 请求路 ...

  8. idea如何设置类头注释和方法注释

    CSDN 2016博客之星评选结果公布      [系列直播]算法与游戏实战技术      "我的2016"主题征文活动 详细:idea如何设置类头注释和方法注释 标签: idea ...

  9. 通过设置P3P头来实现跨域访问COOKIE

    通过设置P3P头来实现跨域访问COOKIE 实际工作中,类似这样的要求很多,比如说,我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是PASSPORT的功能. 我只写一个大 ...

随机推荐

  1. jquery固定表头和列头

    1.对网上的开源方法稍作了些修改 <script type="text/javascript">// <![CDATA[ function FixTable(Ta ...

  2. linux查看分区是否开启acl权限

    1.为什么需要ACL权限 ACL的全称是 Access Control List (访问控制列表) .对于文件或者目录,都有相应的操作权限 r(read 读),w(write 写),x(execute ...

  3. 实现简单的promise

    只考虑成功时的调用,方便理解一下promise的原理promise的例子: 1. 接下来一步步实现一个简单的promise step1:promise 接受一个函数作为构造函数的参数,是立即执行的,并 ...

  4. css中文字体解决方案

    html { font-family: -apple-system, "Noto Sans", "Helvetica Neue", Helvetica, &qu ...

  5. C# datatable 重新排序

    DataTable table = distributionManageService.Tb_fund_withdrawaGetPageList(pagination, queryJson);//设置 ...

  6. 11、js 数组详细操作方法及解析合集

    js 数组详细操作方法及解析合集 前言 在开发中,数组的使用场景非常多,平日中也涉及到很多数组的api/相关操作,一直也没有对这块内容进行一块整理总结,很多时候就算用过几次这个api,在开发中也很容易 ...

  7. TCPDF解决保存中文文件名的方法

    PHP使用TCPDF生成PDF文件时,如果文件名是中文会被直接过滤掉,以下是TCPDF不能保存中文文件名的解决方法: 打开tcpdf.php文件,找到output函数,大约在8467行 或(7554) ...

  8. Java 三种方式实现接口校验

    方法一:AOP 代码如下定义一个权限注解 package com.thinkgem.jeesite.common.annotation; import java.lang.annotation.Ele ...

  9. 手把手的教你安装PyCharm --Pycharm安装详细教程(一)(非常详细,非常实用)

    简介 Jetbrains家族和Pycharm版本划分: pycharm是Jetbrains家族中的一个明星产品,Jetbrains开发了许多好用的编辑器,包括Java编辑器(IntelliJ IDEA ...

  10. ActiveMq主从机制

    搭建mq主从时会在数据库创建3张关于mq的表: 下面介绍ACTIVEMQ_LOCK这张表的作用: Although the JDBC Store does not offer the best per ...