response.getOutputStream() 和 requonse.getWriter() 区别

原创 2008年03月28日 14:08:00
(1)使用tomcat5容器调用response.getOutputStream()方法即可实现,但调用requonse.getWriter()方法时,输出二进制数据时(图片等内容无法显示)则出现“getWriter() has already been called for this response”异常。
(2)使用tomcat6容器调用response.getOutputStream()方法时有中文字符会发生“java.io.CharConversionException:Not an ISO 8859-1 character:”异常,调用requonse.getWriter()方法时可实现文本字符串数据输出,调用response.getOutputStream()方法可现实字节流数据的输出。
    就上述出现的问题进行分析研究,阅读了tomcat6的源代码发现,在调用response.getOutputStream()方法时会判断是否已调用了requonse.getWriter()方法;相反在调用requonse.getWriter()方法时会判断是否已调用了response.getOutputStream()方法。
    在tomcat5时并没有出现这个问题,使用response.getOutputStream()方法可现实两种数据输出,只是在使用requonse.getWriter()时发生异常,而在tomcat6下则必须针对不同的数据类型选择相应输出流,这时为什么呢?仔细阅读tomcat6源代码没有发现问题的根源,给出的参考时:在一次客户端请求的响应动作中,只能调用一种响应输出方法,要么是getWriter()要么是getOutputStream(),且如果使用getOutputStream()方法输出字符串格式的数据时,中文无法正常通过将发生“java.io.CharConversionException:Not an ISO 8859-1 character:”异常,在tomcat5下没有对getOutputStream()方法进行严格控制,中文字符串可正常通过。可见tomcat6的安全机制比tomcat5要严格,对于字符串格式的数据要求使用getWriter()方法输出响应,如果使用了getOutputStream()方法输出响应,则对输出的字符串数据进验证,要求高字节必须为0,显然中文是无法通过的。
 

response的OutputStream输出数据

private void test1(HttpServletResponse response) throws IOException, UnsupportedEncodingException...
  • z83986976
  • z83986976
  • 2014年09月09日 19:35
  • 6301

JavaWeb学习篇之----容器Response详解

今天在来看一下Response容器的相关知识,其实这篇blog早就应该编写了,只是最近有点忙,所以被中断了。下面我们就来看一下Response容器的相关知识吧。Response和我们即将在后面说到的R...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年04月03日 18:36
  • 36303

response详解

1 response概述 response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,...
  • qq_26676207
  • qq_26676207
  • 2016年09月22日 17:13
  • 4135

getOutputStream与getWriter方法

getOutputStream与getWriter方法
  • lzq1125312193
  • lzq1125312193
  • 2017年02月12日 09:34
  • 2964

jsp out对象、response.getWriter与response.getOutputStream

1. out.println("first line"); response.getWriter().println("second line"); %> 输出结果为  second l...
  • q291611265
  • q291611265
  • 2015年06月03日 13:29
  • 4057

Servlet开发(二)Response对象常见应用

(WEB学习笔记 一)Response对象常见应用 1、向客户端输出中文数据(如何解决向客户端输出中文数据乱码问题,分别以OutputStream和PrintWriter输出 2、完成文件的下载 ...
  • Elenal
  • Elenal
  • 2016年06月07日 23:25
  • 1474

response细节--重定向的用处和getWrite/getOutputStream的用法冲突问题

1.重定向的实现: //和下句代码可互换位置,此两行相当于response.sendRedirect(""); response.setStatus(302); //或者"locat...
  • xh16319
  • xh16319
  • 2012年12月28日 23:38
  • 24358

response.getOutputStream() 和 requonse.getWriter() 区别

(1)使用tomcat5容器调用response.getOutputStream()方法即可实现,但调用requonse.getWriter()方法时,输出二进制数据时(图片等内容无法显示)则出现“g...
  • u012129558
  • u012129558
  • 2014年11月10日 11:38
  • 1798

spring4mvc 实现文件下载功能reponse.getOutputStream()重复调用问题解决

本来是准备做一个类似网络硬盘的功能,判断目标是文件的时候,点击就启动下载。 谁想遇到了不少...
  • xchgx
  • xchgx
  • 2014年08月11日 08:26
  • 1304

servlet流方式上传与下载

1.上传 package com.gx.servlet; import java.io.ByteArrayOutputStream; import java.io.File; import jav...
  • gongzi2311
  • gongzi2311
  • 2015年08月11日 14:23
  • 352
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:response.getOutputStream() 和 requonse.getWriter() 区别
举报原因:
原因补充:

(最多只允许输入30个字)