response详解

1.response概述
代表HTTP响应的对象
2.HTTP响应的组成
状态行 协议版本 状态码 原因叙述
响应头 refresh localtion
一个空行
响应实体内容 存储响应数据
3.HTTP响应继承结构
ServletResponse 基础ServletResponse
|-----HttpServletResponse 在基础的ServletResponse接口之上,添加了和HTTP协议相关的API
4.response的API操作
设置状态码的方法
void setStatus(int sc) //设置一个响应时的状态码
void setStatus(int sc, String sm) //添加/修改一个响应状态码 及其原因叙述。
设置响应头的方法
void setHeader(String name, String value) //设置响应头 302+location 请求重定向
void setDateHeader(String name, long date)
void setIntHeader(String name, int value)
void addHeader(String name, String value)
void addDateHeader(String name, long date)
void addIntHeader(String name, int value)
设置响应内容的方法
ServletOutputStream getOutputStream() //以字节流向response缓冲区中写入数据
PrintWriter getWriter() //以字符流向response缓冲区中写入数据

response功能一——向响应实体内容中写入数据

1.字节流乱码处理
response.getOutputStream().write(“aaaa”.getBytes());
1.response.getOutputStream().write(“中国”.getBytes(“utf-8”));
i.在利用服务器的response对象向浏览器发送数据的时候,要求必须使用utf-8字符集,那么浏览器接收数据也必须使用utf-8字符集。
ii.所以现在应该通知浏览器使用utf-8.
通知浏览器使用utf-8:
response.setHeader(“Content-Type”,“text/html;charset=utf-8”);
2.字符流乱码处理
response.getWriter().write(“中国”);
a.字符流在发送数据的时候,底层依然采用字节流进行发送,发送数据会采用服务器默认的字符集iso8859-1来发送。应该修改服务器发送数据时候的字符集为utf-8.
通知服务器修改字符集:
response.setCharacterEncoding(“utf-8”);
b.现在浏览器接收数据仍然为默认的平台码GBK,所以也应该通知浏览器修改字符集为utf-8
response.setHeader(“Content-Type”,“text/html;charset=utf-8”);
c.以上两步操作就可以解决字符流发送数据时候产生的中文乱码。
d.在服务器通知浏览器使用utf-8字符集的时候,会自动读取其中的字符集信息,应用在自己发送数据的过程中。所以只需要通知浏览器使用utf-8字符集即可。
response.setHeader(“Content-Type”,“text/html;charset=utf-8”);
<==>
response.setContentType(“text/html;charset=utf-8”);
.注意:
i.不论是字节流还是字符流都可以使用通知浏览器接收数据字符集的方式来解决中文乱码问题。
ii.使用的流,浏览器会自动帮助我们关闭,不需要手动关闭,如果手动关闭,可能会出现异常。
iii.字节流和字符流两者互斥,不能同时使用。

response功能二 — 请求重定向
1.请求重定向概述:
a.请求重定向是设计在response对象身上的操作。
b.请求重定向原理:
302状态码+location响应头
3.请求重定向原理图:
d.代码实现:
//请求重定向原理:302+location
//1.设置状态码
response.setStatus(302);
//2.设置响应头
//response.setHeader(“location”, “http://www.baidu.com”);
response.setHeader(“location”, request.getContextPath()+"/servlet/RequestDemo12");
在服务器之间和在同一个服务器内部不同的web应用之间都可以进行跳转。
e.请求重定向特点:
两次请求 两次响应
两个请求对象 两个响应对象
地址栏发生变换
服务器之间的资源跳转

response功能三-定时刷新
1.response定时刷新
在浏览器等待一段时间之后再发生跳转的资源跳转方式。
2.定时刷新的原理
设置refresh响应头
response.setHeader(“refresh”,“秒值;url=跳转的目标地址”);
3.定时刷新的原理图

定时刷新的特点:
两次请求 两次响应
两个请求对象两个响应对象
地址栏回发生变化
服务器之间的资源跳转

response功能四–控制浏览器缓存
1.response控制缓存
a.控制浏览器禁止使用缓存
Expires: -1 通知浏览器是否缓存当前资源,如果这个头的值是一个以毫秒为单位的值就是通知浏览器缓存资源到指定的时间点,如果值是0或-1则是通知浏览器禁止缓存。
Expires中保存的是一个日期时间值(毫秒值),这个值从1970-01-01开始,在此值的基础上-1毫秒,减后的时间是一个无效的时间,所以浏览器会认为当前资源已经过期,需要重新读取新的资源。于是就会抛弃缓存,对服务器发生新的访问,索要新的资源。
Cache-Control: no-cache 通知浏览器不使用缓存
no-cache表示控制浏览器不使用缓存。这样每次发起访问的时候都会想服务器索要最新资源。
Pragma: no-cache 通知浏览器不使用缓存。
no-cache表示控制浏览器不使用缓存。这样每次发起访问的时候都会想服务器索要最新资源。
2.控制缓存的实现:
response.setDateHeader(“Expires”, -1);
response.setHeader(“Cache-control”, “no-cache”);
response.setHeader(“Pragma” “no-cache”);
c.控制浏览器缓存:
response.setDateHeader(“Expires”, System.currentTimeMillis()+10006060*24); //24小时
response.setHeader(“Cache-control”, “max-age=60”); //60秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值