一、Response对象的API
- 关于响应行的方法:常用setStatus()方法,设置状态码。
- 关于响应头的方法:常用setHeader()、addHeader()方法,设置响应头中的键值对,后者追加值。
- 关于响应体的方法:常用getWriter()、getOutputStream()方法,前者为字符流,后者为字节流。
- 其他方法:常用sendRedirect()、setContentType()、setCharacterEncoding()、addCookie()等方法。
- Response对象支持重定向
重定向:返回URL给浏览器让其再发送一次请求,故Request域中的数据在重定向后失效。
二、Response对象响应的中文乱码处理
- 首先查看Response对象采用的默认编码字符集
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String characterEncoding = resp.getCharacterEncoding();
System.out.println(characterEncoding);
}
}
- 执行setCharacterEncoding()方法并观察效果
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("UTF-8");
String characterEncoding = resp.getCharacterEncoding();
System.out.println(characterEncoding);
PrintWriter writer = resp.getWriter();
writer.print("你好啊");
}
}
发现Response对象对要返回的数据采用的编码字符集改为UTF-8
浏览器输出的内容则为乱码且根据编码字符集插件发现浏览器采用的编码字符集为GBK
当利用插件修改浏览器编码字符集为UTF-8后,乱码问题解决
- 执行setContentType()方法并观察效果
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
String characterEncoding = resp.getCharacterEncoding();
System.out.println(characterEncoding);
PrintWriter writer = resp.getWriter();
writer.print("你好啊");
}
}
发现Response对象对要返回的数据采用的编码字符集改为UTF-8
浏览器输出的内容不存在乱码问题且根据编码字符集插件发现浏览器采用的编码字符集为UTF-8
- 综上所述,得出setCharacterEncoding()方法和setContentType()方法的作用
(1)setCharacterEncoding()方法:仅能设置Response对象中要响应给浏览器的数据的编码字符集。
(2)setContentType()方法:既能设置Response对象中要响应给浏览器的数据的编码字符集,还能设置浏览器对接收到的数据的解析方式(text/html)和编码字符集(charset)。
(3)以上两个方法需在写入数据前使用,否则失效。