response


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不能同时调用,重定向语句一般作为终结代码。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM