HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
原文地址:HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码 HttpServletResponse 和 ServletResponse 都是接口
具体的类型对象是由Servlet容器传递过来 ServletResponse对象的功能分为以下四种:
设置响应头信息;
发送状态码;
设置响应正文;
重定向; 设置响应头信息
HttpServletResponse 中 (ServletResponse 中没有的)
void setHeader(String var1, String var2); 使用该方法设置的响应头最终会发送给客户端浏览器
示例:
response.setHeader(“content-type”, “text/html;charset=utf-8”); 设置content-type响应头,该头的作用是:
告诉浏览器响应内容为html类型,编码为utf-8。
而且同时会设置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.setCharacterEncoding(“utf-8”);//设置字符响应流的字符编码为utf-8; response.setStatus(200);//设置状态码; response.sendError(404, “您要查找的资源不存在”);//当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。 比如:
response.sendError(404, "您要查找的资源不存在了哈"); 设置响应正文 ServletResponse是响应对象,向客户端输出响应正文(响应体)可以使用ServletResponse的响应流
repsonse一共提供了两个响应流对象:
PrintWriter out = response.getWriter():获取字符流;
ServletOutputStream out = response.getOutputStream():获取字节流;
两个方法都是ServletResponse的 HttpServletResponse继承而得到 注意:
当然,如果响应正文内容为字符,那么使用response.getWriter()
如果响应内容是字节,那么可以使用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 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码的更多相关文章
- HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
HttpServletResponse 和 ServletResponse 都是接口 具体的类型对象是由Servlet容器传递过来 ServletResponse对象的功能分为以下四种: ...
- 接口测试——HttpClient工具的https请求、代理设置、请求头设置、获取状态码和响应头
目录 https请求 代理设置 请求头设置 获取状态码 接收响应头 https请求 https协议(Secure Hypertext Transfer Protocol) : 安全超文本传输协议, H ...
- 最全 HTTP 安全响应头设置指南
销售“安全记分卡”的公司正在崛起,并已开始成为企业销售的一个因素.这些公司组合使用 HTTP 安全报头和 IP 信誉来进行评级.不过,在很大程度上,公司的得分取决于对外开放网站上设置的安全响应报头.本 ...
- Javaweb学习笔记——(十)——————response对象,response字符流缓冲器,响应头,状态码,重定向,requset对象,路径和乱码
请求响应对象: request和response *当服务器接收都请求后,服务器会创建request和response对象,把请求数据封装到request对象中: *然后调用Servlet的sevic ...
- 设置请求头解决浏览器同源问题,ajx跨域获取cookie问题
思想: 添加过滤器 设置请求头 代码如下 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.F ...
- SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...
- 原生js实现文件下载并设置请求头header
原生js实现文件下载并设置请求头header const token="自行定义";//如果有 /** * 向指定路径发送下载请求 * @param{String} url 请求路 ...
- idea如何设置类头注释和方法注释
CSDN 2016博客之星评选结果公布 [系列直播]算法与游戏实战技术 "我的2016"主题征文活动 详细:idea如何设置类头注释和方法注释 标签: idea ...
- 通过设置P3P头来实现跨域访问COOKIE
通过设置P3P头来实现跨域访问COOKIE 实际工作中,类似这样的要求很多,比如说,我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是PASSPORT的功能. 我只写一个大 ...
随机推荐
- 当心JavaScript奇葩的逗号表达式
看看下面的代码输出什么? let a = 2; switch (a) { case (3, 2, 5): console.log(1); break case (2, 3, 4): console.l ...
- 前端有用JavaScript技巧
数组去重 //法1 var arr = [1, 2, 3, 3, 4]; console.log(...new Set(arr)) // [1, 2, 3, 4] //法2 function SetA ...
- HTML的<form>表单标签
表单 HTML 表单用于搜集不同类型的用户输入. ㈠Form标签 ⑴form标签简介 在HTML中,如果创建一个表单,就把各种表单标签放在<form></form>标签内部.我 ...
- Java多线程和并发(十),JMM(Java内存模型)
目录 1.什么是JMM 2.JMM的主内存和工作内存 3.JMM如何解决可见性问题-指令重排序 4.Volatile 十.JMM(Java内存模型)(暂时没有理解) 1.什么是JMM 2.JMM的主内 ...
- 网页“console”输出图文信息
http://www.monmonkey.com/javascript/jiben2.html 参考以上链接中的转义字符使用. http://www.cnblogs.com/Wayou/p/chrom ...
- [AGC034D]Manhattan Max Matching:费用流
前置姿势 \(k\)维空间内两点曼哈顿距离中绝对值的处理 戳这里:[CF1093G]Multidimensional Queries 多路增广的费用流 据说这个东西叫做ZKW费用流? 流程其实很简单, ...
- 51nod-1640--天气晴朗的魔法(简单最小生成树)
1640 天气晴朗的魔法 题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日 ...
- mysql 日期转换sql函数
mysql提供了两个函数: from_unixtime(time_stamp) -> 将时间戳转换为日期 unix_timestamp(date) -> 将 ...
- 微信小程序_(组件)canvas画布
canvas画布效果 官方文档:传送门 Page({ canvasIdErrorCallback: function (e) { console.error(e.detail.errMsg) }, o ...
- Hibernate与MyBaits的区别?
(1)Hibernate是全自动,而myBatis是半自动,Hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成SQL.而myBat ...