HTTP协议包含请求和响应部分。
HttpServletRequest就代表着请求部分
HttpServletResponse就代表着响应部分
常见应用:
1、文件下载(不知道怎么贴代码就不贴了)
通知客户端以下载的方式打开
response.setHeader("Content-type", "text/html;application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=1.jpg");
如果文件是中文名的话
String path = getServletConfig().getServletContext().getRealPath("/美女.jpg");
//通知客户端以下载的方式打开
String name = path.substring(path.lastIndexOf("\\")+1);
response.setHeader("Content-type", "text/html;application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(name, "utf-8")+"");
2、输出中文数据
字节流:
out.write("中文".getBytes("UTF-8"));有乱码
解决办法:
方式一:更改浏览器的查看编码(不可取)
通知浏览器,使用的码表
方式二:response.setHeader("Content-Type", "text/html;charset=UTF-8");
方式三:response.getOutputStream().write("<meta http-equiv=‘Content-Type‘ content=‘text/html;charset=UTF-8‘>".getBytes("UTF-8"));
*方式四:response.setContentType("text/html;charset=UTF-8");//方式二、三、四都是一样的
字符流:
Servlet中的字符流默认查ISO-8859-1(SUN的Servlet规范要求的)
如何更改这个默认的编码呢?response.setCharacterEncoding("UTF-8");
//不要忘记通知浏览器的编码
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type", "text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write(s);//默认查的是ISO-8859-1码表(SUN的Servlet规范要求的)
在字符流输出中文数据时:response.setContentType("text/html;charset=UTF-8");
有两个作用:通知字符流以UTF-8编码输出
通知客户端以UTF-8解码显示
3、动态生成验证码
4、控制缓存时间
发送HTTP头控制缓存时间
response.setDateHeader(“Expires”, System.currentTimeMillis()+1000*60*60);//缓存1小时
5、定时刷新
发送HTTP头
response.setHeader("Refersh",1);//每隔一秒刷新本页面
response.setHeader("Refersh",5;URL=1.html);//5秒钟之后跳转到1.html
6、请求重定向
通过response实现请求重定向。 请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。 地址栏会变,并发送2次 请求,增加服务器负担 实现方式 response.sendRedirect() 实现原理: 302/307状态码和location头即可实现重定向
7、细节
字节流和字符流不能同时使用,互斥的。
通过字符流或字节流输出的数据并不是直接打给浏览器的。而是把数据写到response对象的缓存中的。服务器从缓存中取出数据,按照HTTP协议的响应格式输出给浏览器。
如果你调用的response的输出流没有主动关闭,服务器会替你关的。
HttpServletResponse,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/legend-liu/p/3861100.html