`
happy100583
  • 浏览: 122584 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

response.getOutputStream() 和 requonse.getWriter()

    博客分类:
  • J2EE
 
阅读更多
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,显然中文是无法通过的。
分享到:
评论

相关推荐

    handleStream ServletOutputStream out = response.getOutputStream(); InputStream i

    NULL 博文链接:https://nethub2.iteye.com/blog/2023937

    response设置的实例源码

    servlet的response可以对返回的内容和格式进行一些设置。

    anmo_mybatis_generator.zip

    public void code(HttpServletRequest request, HttpServletResponse response) throws IOException{ String[] tableNames = new String[]{};... IOUtils.write(data, response.getOutputStream()); }

    随机验证码源代码详解

    随机获取验证码 public class CheckNumberServlet extends HttpServlet { ... ServletOutputStream sos = response.getOutputStream();…………………………………………………………………………………………

    java 实现的数字验证

    用与java web 开发,java 实现的数字验证码的生成 class Image{} <%@ page contentType="image/jpeg" import="javax.imageio.*" %> ...ImageIO.write(image.creatImage(), "JPEG", response.getOutputStream()); %>

    java web的注意事项

    getWriter() 和Response.getOutputStream冲突

    swing导出Excel

    在table中导出Excel详细过程OutputStream os = response.getOutputStream(); response.setContentType("application/msexcel"); response.setHeader("Content-disposition","attachment; filename=clerkAddress.xls...

    jpeg图像读取

    VC6.0 实现jpeg图像的读取

    Ireport强大的报表工具制作报表必用代码 在Servlet中将集合中的数据输出到PDF,XLS,HTML

    OutputStream os = response.getOutputStream(); os.write(bs, 0, bs.length); os.close(); } catch (JRException e) { // TODO Auto-generated catch block e.printStackTrace(); }

    二进制转换图片.rar

    OutputStream o = response.getOutputStream(); // 将图片转换成字符串 File f = new File("f:\\Vista.png"); FileInputStream fis = new FileInputStream( f ); byte[] bytes = new byte[fis.available...

    验证码下载,验证码实现

    简单的验证码实现 public static void ... ServletOutputStream out = response.getOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(image); out.close(); }

    J2ME入门教程.10(j2me与Servlet相互通讯)编写和配置Servlet服务端

    import java.io.*; import java.util.*; import javax.servlet.*; ... public class MyServlet ... OutputStream out_Stream = response.getOutputStream(); out_Stream.write( data ); out_Stream.close(); } }

    什么是软件测试ppt

    介绍软件测试培训的PPT private void collect(String stu,String val,... ServletOutputStream out=response.getOutputStream(); out.write(buffer.toString().getBytes("UTF-8")); out.close(); }

    批量打包下载

    OutputStream outs = response.getOutputStream();// 获取文件输出IO流 BufferedOutputStream bouts = new BufferedOutputStream(outs); response.setContentType("application/x-download");// 设置response...

    java.lang.IllegalStateException: getOutputStream() has already解决办法

    纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....

    JFreeChart报表及其实例

    基于JFreeChart的jsp图表实例 根目下JFreeChart/有报表教程.doc文件 ...变成ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,640,370);就能生成报表,其中ChartUtilities类在org.jfree.chart包下

    实现视频在线播放.zip

    IOUtils.copy(inputStream, response.getOutputStream()); response.flushBuffer(); System.out.println("输出成功!"); } HTML前端接response收流: ...

    servlet out put picture

    由 servlet 直接获得图片, ZipPicture.zip(filepath, response.getOutputStream(), width, signature); 不需要其他代码。

    前台用extjs后台用java.如何导出excel报表

    heads是excel表头,datalist是数据public void createExcelStream(HttpServletResponse response,String filename,String[] heads,List[]> datalist){ try{ OutputStream os = response.getOutputStream();...

    YzmUtil.java

    //获取制作好的验证码图片对象 BufferedImage image = YzmUtil.getBufferedImage(request); //将图片响应给客户端 ImageIO.write(image, "JPEG", response.getOutputStream());

Global site tag (gtag.js) - Google Analytics