温故知新--Servlet(六)--HttpServletResponse对象

HttpServletResponse对象是封装服务器端的响应信息,响应消息是由response对象传递给web服务器的,再由web服务器发送给客户端。

一、构建响应信息:

1.构建响应信息:

方式一:response.setHeader("Content-type","test/html;charset=utf-8");

方式二:response.setContentType("text/html;charset=utf-8");

2.构建响应实体:

方式一:response.getOutputStream().write("***".getBytes());

这是一个字节流,是什么字节输出什么字节,而浏览器默认用平台字节码打开服务器发送的数据,如果服务器端使用了非平台码去输出字符的字节数据就需要明确的

指定浏览器编码时所用的码表,以防止乱码问题。response.addHeader("Content-type","text/html;charset=utf-8")/response.setContentType("text/html;charset=utf-8");

方式二:response.getWriter().write("***")

这是一个字符流,response会将此字符进行转码操作后输出到浏览器,这个过程默认使用ISO8859-1码表,而ISO8859-1中没有中文,于是转码过程中用?代替了中文, 导致乱码问题。可以指定response在转码过程中使用的目标码表,防止乱码。

response.addHeader("Content-type","text/html;charset=utf-8")/response.setContentType("text/html;char set=utf-8");


二、其他API方法介绍

1.利用Response设置content-disposition头实现文件下载;

设置响应头content-disposition为“attachment;filename=xxx.xxx”;

利用流将文件读取进来,再利用Response获取响应流输出;

如果文件名为中,一定要进行URL编码,编码所用的码表一定要是utf-8。

2.refresh头控制定时刷新

设置响应头Refresh为一个数值,指定多少秒后刷新当前页面;

设置响应头Refresh3;url=/jjyy04/index.jsp,指定多少秒后刷新到哪个页面;

可以用来实现注册后“注册成功,3秒后跳转到主页”的功能。

HTML可以利用<metahttp-equiv=""content="">标签模拟响应头的功能。

3.利用response设置expiresCache-ControlPragma实现浏览器是否缓存资源

不需要缓存:

expires=0/-1

Cache-Contro=no-cache

Pragma=no-cache

4.Response实现请求重定向

方式一:response.setStatus(302);response.addHeader("Location","URL");

方式二:response.sendRedirect("URL");

三、Response注意的内容

1.对于一次请求,ResponsegetOutputStream方法和getWriter方法是互斥,只能调用其一,特别注意forward后也不要违反这一规则(比如:一个页面getOutputStream() ,forward到另外的一个页面之后调用getWriter());

2.利用Response输出数据的时候,并不是直接将数据写给浏览器,而是写到了Response的缓冲区中,等到整个service方法返回后,由服务器拿出response中的信息组 成HTTP响应消息返回给浏览器。

3.service方法返回后,服务器会自己检查Response获取的OutputStream或者Writer是否关闭,如果没有关闭,服务器自动帮你关闭,一般情况下不要自己关闭这两个 流。

你可能感兴趣的:(response)