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. vty密码登录,到AAA验证登录,以及远程配置网络

    华为的的最简易的远程登录方式,就是密码登录了. 配置命令如下图: 最重要的是权限: 访问级(0级).监控级(1级).系统级(2级)和管理级(3级) 在以上基础上,做了一个远程配置方式,通过一台,修改其 ...

  2. MicroSoft CryptoAPI data/file encrypt/decrypt

    linux 用第三方库 Crypto++, 还未实战. CryptoAPI使用两种密钥:会话密钥与公共/私人密钥对.会话密钥使用相同的加密和解密密钥,这种算法较快,但必须保证密钥的安全传递.公共/私人 ...

  3. 第一次冲刺意见汇总&团队第一阶段总结

    大家对我们小组的意见基本是: 1.设计界面简单 2.功能较少 3.没有实现切换歌曲的功能 谢谢HT小组的走心评价 接下来我们组内准备:1.先调节用户界面,插入一些图片,美化界面,给用户直观的体验上升. ...

  4. SVM支持向量机 详解(含公式推导)

    关于SVM的内容,这三位老哥写的都挺好的,内容是互补的,结合他们三位的一起看,就可以依次推导出SVM得公式了. https://www.cnblogs.com/steven-yang/p/565836 ...

  5. 4.27Linux(5)

    2019-4-27 15:39:03 学了Linux好几天,发现Linux用着还是很爽 你一定要知道你要干啥!!!! 列一下参考博客: mysql博客地址:https://www.cnblogs.co ...

  6. python-简单邮件报警

    在scrapy爬虫项目中经常遇到 爬取数据时报错无法及时处理 导致数据爬取不完整 只能先查看log才能发现报错 首先写一个简单的邮件发送模块 """ @file: ema ...

  7. 神经网络_线性神经网络 3 (Nerual Network_Linear Nerual Network 3)

    1 LMS 学习规则_解方程组 1.1 LMS学习规则举例 X1=[0 0 1]T,t1=0:X2=[1 0 1]T,t2=0:X3=[0 1 1]T,t3=0:X1=[1 1 1]T,t1=1. 设 ...

  8. window server 2008 安装Oracle10g

    oracle安装都大同小异. 开始安装步骤 输入完之后点击下一步 这时候稍等一会儿. 这时候也要稍等一会儿. 直接安装. 设置口令管理,设置SCOTT的密码为tiger就好了. 这时候稍等一会儿. o ...

  9. 深入理解Spring Redis的使用 (四)、RedisTemplate执行Redis脚本

    对于Redis脚本使用过的同学都知道,这个主要是为了防止竞态条件而用的.因为脚本是顺序执行的.(不用担心效率问题)比如我在工作用,用来设置考试最高分. 如果还没有用过的话,先去看Redis脚本的介绍, ...

  10. [Swift]LeetCode609. 在系统中查找重复文件 | Find Duplicate File in System

    Given a list of directory info including directory path, and all the files with contents in this dir ...