Web: Response - 08

Response概述

response是代表响应的对象。

Response继承结构

ServletResponse

|-HttpServletResponse

  • ServletResponse

定义了Response应该具有的基本的方法

  • HttpServletResponse

在ServletResponse的基础上增加了很多HTTP协议相关的方法

Response功能详解

设置状态码

 void

setStatus(int sc)

          Sets the status code for this response.

设置状态码

设置响应头 

void

setHeader(String name, String value)

          Sets a response header with the given name and value.

设置响应头,没有就增加,有就修改

void

setIntHeader(String name, int value)

          Sets a response header with the given name and integer value.

void

setDateHeader(String name, long date)

          Sets a response header with the given name and date-value.

 void

addHeader(String name, String value)

          Adds a response header with the given name and value.

设置响应头,没有就增加,有也是增加,多个同名头并存

void

addIntHeader(String name, int value)

          Adds a response header with the given name and integer value.

void

addDateHeader(String name, long date)

          Adds a response header with the given name and date-value.

获取输出流 

ServletOutputStream

getOutputStream()

          Returns a ServletOutputStream suitable for writing binary data in the response.

获取字节流,向客户端发送数据

PrintWriter

getWriter()

          Returns a PrintWriter object that can send character text to the client.

获取字符流,向客户端发送数据

多次调用getOutputStream()得到的是同一个流

多次调用getWriter()得到的是同一个流

getOutputStream()和getWriter()是互斥的,在同一个response对象上只能获取一种

getOutputStream()和getWriter()不要手动关闭,Servlet容器会关闭此流

响应乱码解决

  • getOutputStream()

利用字节流输出字符数据时,需要开发人员手动将字符转为字节,此时可以手动指定输出编码。

浏览器解析时,如果不指定,默认采用操作系统码解码数据。

如果两码不一致,产生乱码。

此时可以通过设置Content-Type的响应头,告知浏览器当前数据的格式及编码,命令浏览器用指定编码打开数据,乱码解决。

可以手动设置Content-Type,也可以通过便捷方法设置

  • getWriter()

利用字符流输出字符数据时,会将字符按指定编码转为字节写入response响应体,最终发送给浏览器。

此编码默认为iso8859-1,其中没有中文,输出中文时必然产生乱码。

此时可以通过response.setCharacterEncoding();控制写入response时的编码,解决这个问题。

除此之外,如果浏览器打开数据的编码和发送编码不一致仍然会有乱码,

可以通过response.setContentType()指定浏览器打开编码,解决乱码

其实,setContentType方法,除了会设置Content-Type头,还会隐含的设置setCharacterEncoding,所以其实只需设置setContentType就可以解决响应乱码

  • 响应乱码解决总结

一句话解决响应乱码,无论字节流还是字符流

实现请求重定向

重定向是javaweb三种资源跳转方式之一

原理就是通过302状态码加Location响应头,通知浏览器重定向访问指定资源,从而实现资源跳转。

  • 请求重定向特点

浏览器和服务器之间的资源跳转

两次请求两次响应

无法通过request域传递数据

地址栏会发生变化

  • 重定向实现

重定向是浏览器和服务器之间的资源跳转,地址是给浏览器用的,地址必须以应用名称开头。

  • 手动实现重定向
  • 便捷方式实现重定向

举例

实现定时刷新

定时刷新时javaweb三种资源跳转方式之一

原理是通过refresh头命令浏览器在指定时间之后自动刷新访问一个新的地址,从而实现资源跳转。

  • 定时刷新特点

浏览器和服务器之间的资源跳转

两次请求两次响应

无法通过request域传递数据

地址栏会发生变化

可以在资源跳转期间提示额外消息

  • 定时刷新实现

重定向是浏览器和服务器之间的资源跳转,地址是给浏览器用的,地址必须以应用名称开头。

举例 

  • 禁止缓存

浏览器默认有缓存机制,可以缓存曾经访问过的资源,再次访问该资源时,可以直接使用本地缓存提高访问效率。

但有些资源,开发者不希望浏览器缓存,例如 验证码图片 二维码图片 等等

此时可以通过设置禁止缓存响应头,禁止浏览器缓存指定资源

 举例

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值