java - PrintWriter java.io.IOException : Closed 错误

标签 java servlets

在 servlet 类的 doPost 方法中执行此操作时在 PrintWriter 上获取 IOExcepiton:

doPost(HttpServletRequest request,
        HttpServletResponse response){
    String replyMessage = "STATUS_ACCEPT";
    response.setStatus(HttpServletResponse.SC_OK);
    response.setContentType("text/plain; charset=utf-8");

    response.setContentLength(replyMessage.length());
    response.setIntHeader("content-length", replyMessage.length());
    response.getWriter().println(replyMessage);//getting IOException closed on calling this method
    response.flushBuffer();}

如果我使用输出流发送数据没有错误:

    ServletOutputStream outputStream = response.getOutputStream();
    byte[] result = "STATUS_ACCEPT".getBytes("UTF-8");

    response.setStatus(HttpServletResponse.SC_OK);
    response.setContentType("text/plain; charset=utf-8");

    response.setContentLength(result.length);
    response.setIntHeader("content-length", result.length);

    outputStream.write(httpOutData);

如果没有得到 IOException,我应该如何使用 printwriter?

最佳答案

最像的原因是这样的:

response.setContentLength(replyMessage.length());
// ...
response.getWriter().println(replyMessage)

这意味着,您的响应内容至少比 setContentLenght 宣布的内容长一个字节:由 println() 附加的尾随换行符。也许区别是两个字节:CR 和 LF。

注意:如果你解决这个问题,在一般情况下你仍然会遇到问题:你将内容长度设置为 字符数,而在 UTF-8 编码中并不总是 >字节setContentLength() 想要字节数。

因此,最好删除所有修改内容长度的代码,因为如果您不设置它,它将自动计算。

关于java - PrintWriter java.io.IOException : Closed 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12252288/

相关文章:

java - 处理JSP编译错误

java - 在 POJO 中验证 JSON

java - 无法包含 JSP 文件

java - 是否可以将 Java Servlet 部署到 GAE?

java - GraalVM 应用程序可以部署在 "regular"VM 上吗

java - Spring 4 和 Hibernate 4 - GenericJDBCException : could not prepare statement

java - 通过 Notes-UpdateSite 数据库将 jar 部署到 Domino 服务器,以 NoClassDefFoundException 结尾

java - 带有 servlet 3 规范的 Tomcat 6

rest - ContainerRequestFilter ContainerResponseFilter 不会被调用

java - 如何使用 netbeans IDE 添加 jFreeChart 库?