相关疑难解决方法(0)

我应该关闭servlet输出流吗?

可能重复:
是否应该在HttpServletResponse.getOutputStream()/.getWriter()上调用.close()?

我负责关闭HttpServletResponse.getOutputStream()(或getWriter()甚至输入流)还是应该将它留给容器?

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException {
    OutputStream o = response.getOutputStream();
    ... 
    o.close(); //yes/no ?
}
Run Code Online (Sandbox Code Playgroud)

java servlets

57
推荐指数
2
解决办法
4万
查看次数

如何在servlet规范3中正确检测客户端断开连接?

我已经尝试写入响应,因为没有正确的断开回调:

private boolean write(byte[] output, AsyncContext context) {
    try {
        OutputStream stream  = context.getResponse().getOutputStream();
        stream.write(output);
        stream.flush();
        return true;
    } catch (IOException ex) {
        //client disconnected
        log.error(ex);
        removeAsyncContext(context);
        return false;
    }

}
Run Code Online (Sandbox Code Playgroud)

但这似乎没有诀窍.当客户端断开连接时,写入和刷新缓冲区不会引发异常.

奇怪的是,第二次尝试写入输出流时(断开连接后),写入会引发异常.它看起来像你第一次写/刷它,一些内部状态被设置为错误,没有通知.

我试过Jetty 8和Tomcat 7,我看到了同样的行为.

是否有解决方案来确定客户是否收到了该消息?我错过了什么吗?

java client asynchronous disconnect servlet-3.0

6
推荐指数
1
解决办法
3449
查看次数

使用IE8浏览器部署在jboss上的应用程序的ClientAbortException

我在Jboss部署的应用程序有以下异常,浏览器是IE8

2012-03-19 09:17:12,014 WARN  [org.apache.catalina.core.ContainerBase.jboss.web].         [localhost]] Exception Processing ErrorPage[errorCode=404, location=/internalError.jsp]
ClientAbortException:  java.net.SocketException: Broken pipe
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:327)
Run Code Online (Sandbox Code Playgroud)

似乎浏览器在服务器将internalError.jsp写入它之前关闭了套接字.请建议如何解决它,或至少我如何隐藏此异常.

谢谢Hikumar

java jboss jsp java-ee

6
推荐指数
1
解决办法
6237
查看次数

防止ClientAbortException

当我尝试将数据发送到客户端浏览器时,我收到此异常.我使用apache POI lib生成一个Excel文件,如下例所示:

workbook = generateData();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=" + this.filename);
out = response.getOutputStream();
workbook.write(out);
Run Code Online (Sandbox Code Playgroud)

这适用于少量数据,但每次我尝试使用大量数据时它都无法工作.应用程序需要超过30秒才能生成数据,这是否太长,我可以阻止这种情况吗?

ClientAbortException:  java.net.SocketException: Broken pipe
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:369)
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:448)
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:318)
    at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:274)
    ...
Caused by: java.net.SocketException: Broken pipe
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:539)
    at org.apache.jk.common.JkInputStream.doWrite(JkInputStream.java:162)
    at org.apache.coyote.Response.doWrite(Response.java:560)
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364)
Run Code Online (Sandbox Code Playgroud)

java tomcat

5
推荐指数
0
解决办法
2万
查看次数

标签 统计

java ×4

asynchronous ×1

client ×1

disconnect ×1

java-ee ×1

jboss ×1

jsp ×1

servlet-3.0 ×1

servlets ×1

tomcat ×1