Java大数据之路--Response

Response

目录

Response

Response概述

Response功能一--解决乱码

Response功能二--请求重定向(资源跳转方式)

Response功能三--定时刷新(资源跳转方式)

Response功能四----控制缓存

三种资源跳转方式总结


Response概述

1、response含义:代表HTTP响应

2、response继承结构

ServletResponse

    |

    |---HttpServletResponse 在基础的response接口之上添加了HTTP协议相关的内容,

    善于HTTP协议相关开发。

3、response组成

状态行HTTP协议版本,状态码,叙述OK
多个响应头location  refresh  Expires Cahce-control pargma
一个空行 
响应实体内容响应数据   HTML json

302+location 请求重定向,304缓存,404访问资源不存在,500服务器报错

4、response操作

a.设置状态码方法

void setStatus(int sc)
void setStatus(int sc,String sm)

b.设置响应头的方法

void setHeader(String name,String value)
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)

c.设置响应内容的方法

ServletOutputStream getOutputStream() 
PrintWriter getWriter()

 

Response功能一--解决乱码

response的响应实体内容中,可能会包含中文,这样就可能需要进行乱码处理。在面对response的字节流和字符流时,有不同的处理方法。

1、字节流

response.getOutputStream()以字节流的形式发送数据。

在将字符转换为byte类型数据时,如果采用默认的平台码GBK。则直接发送到浏览器不会产生乱码。因为浏览器也是GBK字符集。两者统一。

在字符转换为byte类型数据时,使用utf-8进行转换,那么浏览器接收数据必须也是utf-8字符集。所以应该通知浏览器使用utf-8接收。通知浏览器的方式

response.setHeader("Content-Type","text/html;charset=utf-8");

2、字符流

response.getWriter()以字符流的形式发送数据。

服务器在发送字符流数据的时候,底层仍然是以字节流的形式发送。发送是会采用当前服务器默认的字符集转换字符为字节,所以会使用iso8859-1来编码数据。

浏览器接收数据是GBK,现在要求服务器发送数据和浏览器接收数据都是用utf-8。所以需要通知服务器使用utf-8发送数据,及通知浏览器使用utf-8接收数据。

//通知服务器发送数据时的字符集
response.setCharacterEncoding("utf-8");
//通知浏览器接收数据时的字符集
response.setHeader("Content-Type", "text/html;charset=utf-8");

总结:在通知浏览器使用某一字符集接收数据时,服务器会自动采用此字符集来发送数据。不论是字节流还是字符流,都通过通知浏览使用utf-8字符集这种形式,来解决乱码问题。

注意:乱码处理的语句需要放在所有的响应内容之前。字节流和字符流不能同时使用。不要关闭字节流和字符流,会导致服务器异常。浏览器会自动结束这些流。

 

Response功能二--请求重定向(资源跳转方式)

1、请求重定向图解

2、实现原理

//请求重定向实现原理
//实现原理:302+location
response.setStatus(302);
response.setHeader("location","/pjname/servlet/Demo1");
response.setHeader("location","http://www.baidu.com");
response.sendRedirect("http://www.baidu.com");

Response功能三--定时刷新(资源跳转方式)

1、定时刷新图解

2、实现原理(设置refresh头)

//处理响应乱码
response.setContentType("text/html;charset=utf-8");
//设置响应内容
response.getwrite().write("<h1 alig'center'><font color='red'>注册成功,3秒后跳转</font></h1>");
//定时刷新实现原理:设置refresh响应头
response.setHeader("refresh","3;http://www.baidu.com");

Response功能四----控制缓存

1、控制浏览器不使用缓存

//控制浏览器不使用缓存
//Expires -1表示1970-1-1的0点基础上再减去1ms,此事件无效,所以会加载最新资源
response.setDateHeader("Expires",-1);
response.setHeader("Cache-control","no-cache");
response.setHeader("pargma","no-cache");

2、控制浏览器使用缓存

//控制浏览器使用缓存24小时
response.setDateHeader("Expires","System.currentTimeMillis()+1000*60*60*24");
//5秒
response.setHeader("Cache-control","max-age=5");

三种资源跳转方式总结

Request请求转发特点:

一次请求,一次响应,一个请求对象,一个响应对象,服务器内部的资源跳转,地址栏不会发生改变。

Response请求重定向特点:

两次请求,两次响应,两个请求对象,两个响应对象,服务器之间的资源跳转,地址栏会发生改变。

Response定时刷新特点:

两次请求,两次响应,两个请求对象,两个响应对象,服务器之间的资源跳转,地址栏会发生改变。

定时刷新和请求重定向到区别:

定时刷新会经过指定时间之后再跳转。定时刷新是通过refresh响应头实现。请求重定向会在执行时立刻发生跳转。请求重定向是通过302状态码加上location响应头实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值