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");
1.利用Response设置content-disposition头实现文件下载;
设置响应头content-disposition为“attachment;filename=xxx.xxx”;
利用流将文件读取进来,再利用Response获取响应流输出;
如果文件名为中,一定要进行URL编码,编码所用的码表一定要是utf-8。
2.refresh头控制定时刷新
设置响应头Refresh为一个数值,指定多少秒后刷新当前页面;
设置响应头Refresh为3;url=/jjyy04/index.jsp,指定多少秒后刷新到哪个页面;
可以用来实现注册后“注册成功,3秒后跳转到主页”的功能。
在HTML可以利用<metahttp-equiv=""content="">标签模拟响应头的功能。
3.利用response设置expires、Cache-Control、Pragma实现浏览器是否缓存资源
不需要缓存:
expires=0/-1
Cache-Contro=no-cache
Pragma=no-cache
4.Response实现请求重定向
方式一:response.setStatus(302);response.addHeader("Location","URL");
方式二:response.sendRedirect("URL");
三、Response注意的内容
1.对于一次请求,Response的getOutputStream方法和getWriter方法是互斥,只能调用其一,特别注意forward后也不要违反这一规则(比如:一个页面getOutputStream() ,forward到另外的一个页面之后调用getWriter());
2.利用Response输出数据的时候,并不是直接将数据写给浏览器,而是写到了Response的缓冲区中,等到整个service方法返回后,由服务器拿出response中的信息组 成HTTP响应消息返回给浏览器。
3.service方法返回后,服务器会自己检查Response获取的OutputStream或者Writer是否关闭,如果没有关闭,服务器自动帮你关闭,一般情况下不要自己关闭这两个 流。