response对象功能分为4中:
设置响应头信息、发送状态码setStatus、设置响应体、重定向
response是响应对象,想客户端输入响应体可以使用response的响应流:
response.getWrite();获取字符流,response.OutputStream()获取字节流,一个请求中不能同时使用两个流,否则会抛出IllegalArgumentException不合法的参数异常。
使用response.getWrite()时需要注意默认的编码是ISO-8859-1编码,使用response.setCharacterEncoding("UTF-8"),来保证输出给客户端是字符是UTF-8
response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系 统的编码,客户端浏览器的默认编码是GBK,需要动修改浏览器的编码是UTF-8
通过response.setContentType("text/html;charset=UTF-8")来进行设置客户端的浏览器解析编码setContentType()同时具有setCharacterEncoding的功能,所以在实际开发中只要编写 response.setContentType("text/html;charset=UTF-8");就可以解决页面输出中文乱码问题。
response.getWriter()是PrintWriter类型,所以它有缓冲区,缓冲区的默认大小为8KB。也就是说,在响应数据没有输出8KB之前,数据都是存放在缓冲区中,而不会立刻发送到客户端。当Servlet执行结束后,服务器才会去刷新流,使缓冲区中的数据发送到客户端。
如果希望响应数据马上发送给客户端:
向流中写入大于8KB的数据;
调用response.flushBuffer()方法来手动刷新缓冲区;
响应头
可以使用response对象的setHeader()方法来设置响应头!使用该方法设置的响应头最终会发送给客户端浏览器
response.setHeader(“content-type”, “text/html;charset=utf-8”):设置content-type响应头,该头的作用是告诉浏览器响应内容为html类型,编码为utf-8。而且同时会设置response的字符流编码为utf-8,即response.setCharaceterEncoding(“utf-8”);l response.setHeader("Refresh","5; URL=http://www.baidu.com"):5秒后自动跳转
乱码解决方式
决乱码方法如下(不要记忆--了解):
String filenameEncoder=””;
if (agent.contains("MSIE")) {
// IE浏览器
filenameEncoder= URLEncoder.encode(filename, "utf-8");
filenameEncoder= filenameEncoder.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncoder= "=?utf-8?B?"
+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {
// 其它浏览器
filenameEncoder= URLEncoder.encode(filename, "utf-8");
}
其中agent就是请求头User-Agent的值
response获得的流不需要手动关闭,web容器(tomcat容器)会帮助我们关闭,getWriter和getOutputStream不能同时调用,重定向语句一般作为终结代码。