一、Response对象API:
1、关于响应行的方法: --- setStatus(int);
设置响应的状态码
200 正确
302 重定向
304 查找本地缓存
404 请求资源不存在
500 服务器内部错误
2、关于响应头的方法:
set开头的方法:针对一个key对应一个value的情况。
--- setHeader(String name,String value);
例如:
比如有一个头 content-Type:text/html setHeader(“content-Type”,”text/plain”);
最终得到头的结果:content-Type:text/plain
add开头的方法:针对一个key对应多个value的情况。
--- addHeader(String name,String value);
例如:
比如有一个content-Type:text/html addHeader(“content-Type”,”text/plain”);
最终得到头的结果:content-Type:text/html,text/plain
3、关于响应体的方法:
--- getOutputStream(); --- 响应的是字节流;
--- getWriter(); --- 响应的是字符流;
4、其他常用的API:
--- sendRedirect(String location); --- 重定向
例如:实现重定向
1、通过设置状态码和location响应头结合
response.setStatus(302);
response.setHeader("location","/工程名/类名");
2、通常开发中的方式(重点)
response.sendRedirect(“/工程名/类名”);替换重定向两句写法
--- setContentType(String type); --- 设置浏览器打开页面时候采用的字符集
--- setCharacterEncoding(String charset); --- 设置响应字符流的缓冲区字符集
--- addCookie(Cookie cookie); --- 服务器向浏览器回写Cookie的方法
二、response对象响应的中文乱码处理:
方式一:使用字节流响应中文
1、使用字节流的方式输出中文:
ServletOutputStream outputstream = response.getOutputStream();
outputstream.write("中国".getBytes());
如果用这种方式输出中文,可能会出现乱码,也可能不会,取决于使用的浏览器打开默认字符集;
解决:将中文转成字节数组的时候和浏览器默认打开的时候采用的字符集一致即可。
改为:ServletOutputStream outputstream = response.getOutputStream();
//设置浏览器默认打开的时候采用的字符集
response.setHeader("Content-Type","test/html;charset=UTF-8");
//设置中文转成字节数组字符集编码
outputstream.write("中国".getBytes("UTF-8"));
方式二:使用字符流的方式输出中文:
response.getWriter().println("中国");
如果是这样输出中文,必定会出现乱码问题。字符流是有缓冲区的,response获得字符流,
response设计默认的缓冲区编码是ISO-8859-1。这个字符集不支持中文的。
解决:
设置response获得字符流缓冲区的编码和设置浏览器默认打开时候采用的字符集一致即可。
改为: //设置浏览器默认打开的时候采用的字符集
response.setHeader("Content-Type","test/html;charset=UTF-8");
//设置response获得字符流的缓存区的编码
response.setCharacterEncoding("UTF-8");
response.getWriter().println("中国");
简化: response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("中国");