`
happy100583
  • 浏览: 124147 次
  • 性别: 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

    ServletOutputStream out = response.getOutputStream(); out.write("<html><body>Hello, World!</body></html>".getBytes()); out.flush(); out.close(); ``` 描述中的"InputStream i" 提到了输入流`InputStream`...

    response设置的实例源码

    PrintWriter writer = response.getWriter(); writer.println("<h1>Hello, World!</h1>"); writer.close(); ``` 七、示例代码 以下是一个简单的Servlet实例,展示了上述各种设置: ```java import javax.servlet.*;...

    response.getWriter().write()向前台打印信息乱码问题解决

    总之,解决response.getWriter().write()输出乱码的问题并不复杂,关键是在输出前正确设置响应头的MIME类型和字符集。在现代Web开发中,推荐使用UTF-8编码,因为它能够兼容世界上几乎所有语言的字符,从而使得Web...

    org.apache.catalina.connector.ClientAbortException和TOMCAT的日志配置

    问题1:TOMCAT下载文件出错:org.apache.catalina.connector.ClientAbortException. 问题2:TOMCAT记录接收数据大小、发送数据大小和请求处理时间

    Response-Headers详解

    try (OutputStream out = response.getOutputStream()) { // 使用Apache POI或其他库生成Excel内容并写入out流 } ``` #### 五、动态生成JPEG图像 如果需要动态生成并发送JPEG格式的图像,也需要设置正确的响应...

    anmo_mybatis_generator.zip

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

    Java Servlet输出中文乱码问题解决方案

    PrintWriter writer = response.getWriter(); writer.write(date); } ``` 这是因为字符流默认采用 ISO-8859-1 编码形式,该编码不支持中文。解决方法是使浏览器和服务器编码保持一致,例如: ```java private ...

    java response 下载文件方法

    OutputStream ou = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); // 设置响应类型为二进制流 // 写入响应流并关闭 ou.write(buffer); ou....

    随机验证码源代码详解

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

    JSP内置对象request和response.doc

    JSP内置对象request和response详解 JSP内置对象request和response是JSP开发中两个非常重要的对象,它们分别用于处理客户端请求和响应信息。在本文档中,我们将详细介绍request和response对象的功能和使用方法。 ...

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

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

    java web的注意事项

    getWriter() 和Response.getOutputStream冲突

    SpringBoot导出Excel的四种方式

    response.getWriter().write(writer.toString()); response.getWriter().flush(); } ``` 四、使用Spring Data JPA的QueryDsl扩展 如果你的数据存储在数据库中,并且使用了Querydsl,可以利用Querydsl的Excel扩展...

    jpeg图像读取

    在本文中,我们将深入探讨如何使用...总结来说,通过MFC和GDI+,我们可以方便地在Visual C++ 6.0环境中实现JPEG图像的读取和显示。理解这些步骤对于任何想要在Windows应用程序中处理图像的开发者来说都是非常重要的。

    tomcat6下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法

    1. 在JSP页面中混合使用了二进制输出和文本输出:在JSP页面中如果使用了response.getOutputStream()进行二进制数据的输出,比如图片验证码或文件下载,紧接着又尝试使用response.getWriter()输出文本内容,将会引发...

    JMESA SERVLET

    TextExport.export(response.getOutputStream(), table); } else if ("pdf".equals(format)) { JTable table = new JTable(dataList); PdfExport.export(response.getOutputStream(), table); } else if ("xls...

    访问或添加三个范围的属性与获取Request-Session-ServletContext-Response对象.rar

    开发者可以通过`response.getWriter()`或`response.getOutputStream()`来写入响应体,`response.sendRedirect()`用于重定向,`response.setStatus()`设置状态码,`response.setHeader()`设置响应头。 在实际开发中...

    二进制转换图片.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(); }

    java图片上传下载

    response.getWriter().write("{\"status\":\"success\"}"); ``` 对于图片下载,主要涉及到从服务器读取图片并返回给客户端的过程: 1. **读取图片**:根据图片的存储路径,使用`FileInputStream`读取图片内容。 `...

Global site tag (gtag.js) - Google Analytics