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,显然中文是无法通过的。
分享到:
相关推荐
ServletOutputStream out = response.getOutputStream(); out.write("<html><body>Hello, World!</body></html>".getBytes()); out.flush(); out.close(); ``` 描述中的"InputStream i" 提到了输入流`InputStream`...
PrintWriter writer = response.getWriter(); writer.println("<h1>Hello, World!</h1>"); writer.close(); ``` 七、示例代码 以下是一个简单的Servlet实例,展示了上述各种设置: ```java import javax.servlet.*;...
总之,解决response.getWriter().write()输出乱码的问题并不复杂,关键是在输出前正确设置响应头的MIME类型和字符集。在现代Web开发中,推荐使用UTF-8编码,因为它能够兼容世界上几乎所有语言的字符,从而使得Web...
问题1:TOMCAT下载文件出错:org.apache.catalina.connector.ClientAbortException. 问题2:TOMCAT记录接收数据大小、发送数据大小和请求处理时间
try (OutputStream out = response.getOutputStream()) { // 使用Apache POI或其他库生成Excel内容并写入out流 } ``` #### 五、动态生成JPEG图像 如果需要动态生成并发送JPEG格式的图像,也需要设置正确的响应...
public void code(HttpServletRequest request, HttpServletResponse response) throws IOException{ String[] tableNames = new String[]{};... IOUtils.write(data, response.getOutputStream()); }
PrintWriter writer = response.getWriter(); writer.write(date); } ``` 这是因为字符流默认采用 ISO-8859-1 编码形式,该编码不支持中文。解决方法是使浏览器和服务器编码保持一致,例如: ```java private ...
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详解 JSP内置对象request和response是JSP开发中两个非常重要的对象,它们分别用于处理客户端请求和响应信息。在本文档中,我们将详细介绍request和response对象的功能和使用方法。 ...
纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
getWriter() 和Response.getOutputStream冲突
response.getWriter().write(writer.toString()); response.getWriter().flush(); } ``` 四、使用Spring Data JPA的QueryDsl扩展 如果你的数据存储在数据库中,并且使用了Querydsl,可以利用Querydsl的Excel扩展...
在本文中,我们将深入探讨如何使用...总结来说,通过MFC和GDI+,我们可以方便地在Visual C++ 6.0环境中实现JPEG图像的读取和显示。理解这些步骤对于任何想要在Windows应用程序中处理图像的开发者来说都是非常重要的。
1. 在JSP页面中混合使用了二进制输出和文本输出:在JSP页面中如果使用了response.getOutputStream()进行二进制数据的输出,比如图片验证码或文件下载,紧接着又尝试使用response.getWriter()输出文本内容,将会引发...
TextExport.export(response.getOutputStream(), table); } else if ("pdf".equals(format)) { JTable table = new JTable(dataList); PdfExport.export(response.getOutputStream(), table); } else if ("xls...
开发者可以通过`response.getWriter()`或`response.getOutputStream()`来写入响应体,`response.sendRedirect()`用于重定向,`response.setStatus()`设置状态码,`response.setHeader()`设置响应头。 在实际开发中...
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(); }
response.getWriter().write("{\"status\":\"success\"}"); ``` 对于图片下载,主要涉及到从服务器读取图片并返回给客户端的过程: 1. **读取图片**:根据图片的存储路径,使用`FileInputStream`读取图片内容。 `...