java response 对象_82 Java基础 Response对象

1 Response对象概述

负责对浏览器进⾏响应的对象

什么是响应: 服务器接收到请求需要进行处理,将处理以后的结果显示回浏览器端(将这个过程称为是响应Response)。

查看Servlet中的service方法得知, Servlet中使用的ServletResponse接口, 而我们使用的是 ServletResponse的子接口HttpServletResponse, 它继承自ServletResponse, 是与HTTP协议相关 的Response响应对象

我们使⽤的⼦接⼝HttpServletResponse, 此接⼝对象由Tomcat引擎提供

可以实现对客户端的响应, 响应内容包括: 响应⾏,响应头,响应体

cc359805a34d25c7d1bffbf9a83411f7.png

2 Response设置响应⾏

⽅法

返回值

描述

setStatus(int sc)

void

设置响应的状态码

设置响应的状态码

200 正确

302 重定向

304 查找本地缓存

404 请求资源不存在

500 服务器内部错误

response.setStatus(500);

3 Response设置响应头

HTTP协议的响应头,数据格式键值对 k:v

包含指导性信息,指导客户端

⽅法

返回值

描述

addHeader(String key,String value)

void

添加响应头,值为String类型

addIntHeader(String key,int value)

void

添加响应头,值为int类型

addDateHeader(String key,long l)

void

添加响应头,值为⽇期类型

setHeader(String key,String value)

void

更改响应头,值为String类型

setIntHeader(String key,int value)

void

更改响应头,值为int类型

setDateHeader(String key,long l)

void

更改响应头,值为⽇期类型

add开头的⽅法:针对⼀个key对应多个value的情况。

⽐如已有⼀个响应头 blossom:java

然后执⾏ addHeader(“blossom”,”java2222”);

最终得到响应头的结果:blossom:java,java2222

set开头的⽅法:针对⼀个key对应⼀个value的情况

⽐如已有⼀个响应头 blossom:java

然后执⾏ setHeader(“blossom”,”java2222”);

最终得到响应头的结果:blossom:java2222

演示:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/*

* response对象设置响应头

*/

response.addHeader("blossom","java");

response.addHeader("blossom","java111");

response.setHeader("blossom","java2222");

}

4 Response设置响应体

HTTP的响应体,就是⻚面的正文部分

字符流向浏览器写数据

⽅法

返回值

描述

write()

PrintWriter

使⽤字符串数据,没有差别, 输出是整数,查询编码表

print()

PrintWriter

⽆论是什么,原样打印

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/*

* response对象⽅法getWriter()

* 打印流的响应体

* write() 字符流,使⽤字符串数据,没有差别, 输出是整数,查询编码表

* print() ⽆论是什么,原样打印

*/

PrintWriter pw = response.getWriter();

pw.write(100);

pw.print(100);

}

字符流的中⽂乱码问题

产⽣乱码原因: 编码和解码不⼀致

提问:在Servlet中编写以下代码,向⻚⾯输出中⽂是否会产⽣乱码?

response.getWriter().print("中⽂");

会乱码:

原因:

字符流是有缓冲区的,response获得字符流,response设计默认的缓冲区编码是ISO-8859-1。这个字符集不⽀持中⽂的。

解决:

设置response获得字符流缓冲区的编码 与 设置浏览器默认打开时候采⽤的字符集⼀致即可。

|⽅法 |放回值| 描述| |---|---| |setHeader("Content-Type","text/html;charset=UTF-8") |void| 设置浏览器打开⻚⾯时采⽤的字符集| |setContextType(String type) |void |设置浏览器打开⻚⾯时采⽤的字符集|

// 设置浏览器默认打开的时候采⽤的字符集:

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

// 简化代码

response.setContentType("text/html;charset=UTF-8");

// 输出中⽂汉字

response.getWriter().println("中⽂");

字节流向浏览器写数据

⽅法

返回值

描述

getOutputStream()

OutputStream

返回字节输出流OutputStream,响应⾮⽂本类型的数据

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/*

* response对象的⽅法getOutputStream,响应⾮⽂本类型的数据

*/

//获取图⽚的绝对路径

String aFile = getServletContext().getRealPath("download/a.png");

FileInputStream fis = new FileInputStream(aFile);

OutputStream out = response.getOutputStream();

int len = 0;

byte[] bytes = new byte[1024];

while ((len = fis.read(bytes))!=-1){

out.write(bytes,0,len);

}

fis.close();

}

5 重定向

540322acffc9f7c634b1c9256ae1f903.png

重定向的写法

浏览器进⾏重新的定向:

设置302状态码: setStatus(302)

设置重定向资源的地址: setHeader("location","资源")

通过HttpServletResponse对象中的以下⽅法实现重定向

⽅法

返回值

描述

sendRedirect(String location)

void

重定向

重定向的代码实现

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/*

* 浏览器进⾏重新的定向:

* 设置302状态码: setStatus(302)

* 设置重定向资源的地址: setHeader("location","/webtest/servlet2")

*/

//response.setStatus(302);

//response.setHeader("location","/webtest/servlet2");

response.sendRedirect("servlet2");

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值