0 0

jetty+dwr实现Comet Web应用 ,页面刷新时常出现异常"远程主机强迫关闭了一个现有的连接"5

用jetty7+dwr2.06实现Comet,往页面push数据,页面刷新时,经常会出现以下异常信息,但异常并不妨碍功能的实现,照样可以push数据,,不过老打出异常总感到不爽,不知道是否有人遇到过,希望能给点解决的线索:

2010-5-11 22:43:38 org.directwebremoting.util.CommonsLoggingOutput warn
警告: Unhandled Exception
org.eclipse.jetty.io.RuntimeIOException: org.eclipse.jetty.io.EofException
        at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:223)
        at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:235)
        at org.eclipse.jetty.io.UncheckedPrintWriter.print(UncheckedPrintWriter.java:384)
        at org.eclipse.jetty.io.UncheckedPrintWriter.println(UncheckedPrintWriter.java:542)
        at org.directwebremoting.dwrp.PlainScriptConduit.addScript(PlainScriptConduit.java:86)
        at org.directwebremoting.extend.EnginePrivate.remoteHandleException(EnginePrivate.java:118)
        at org.directwebremoting.dwrp.BaseScriptConduit.close(BaseScriptConduit.java:111)
        at org.directwebremoting.dwrp.PollHandler$1.run(PollHandler.java:199)
        at org.directwebremoting.dwrp.ThreadWaitSleeper.goToSleep(ThreadWaitSleeper.java:45)
        at org.directwebremoting.dwrp.PollHandler.handle(PollHandler.java:211)
        at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
        at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:427)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:457)
        at org.eclipse.jetty.server.session.SessionHandler.handle(SessionHandler.java:182)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:933)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:362)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:245)
        at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
        at org.eclipse.jetty.server.Server.handle(Server.java:334)
        at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:559)
        at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1007)
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:747)
        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:203)
        at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:406)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:462)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
        at java.lang.Thread.run(Unknown Source)
Caused by: org.eclipse.jetty.io.EofException
        at org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:885)
        at org.eclipse.jetty.http.AbstractGenerator.blockForOutput(AbstractGenerator.java:486)
        at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:145)
        at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:86)
        at java.io.ByteArrayOutputStream.writeTo(Unknown Source)
        at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:258)
        at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:107)
        at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:214)
        ... 34 more
Caused by: java.io.IOException: 远程主机强迫关闭了一个现有的连接。
        at sun.nio.ch.SocketDispatcher.writev0(Native Method)
        at sun.nio.ch.SocketDispatcher.writev(Unknown Source)
        at sun.nio.ch.IOUtil.write(Unknown Source)
        at sun.nio.ch.SocketChannelImpl.write0(Unknown Source)
        at sun.nio.ch.SocketChannelImpl.write(Unknown Source)
        at java.nio.channels.SocketChannel.write(Unknown Source)
        at org.eclipse.jetty.io.nio.ChannelEndPoint.flush(ChannelEndPoint.java:237)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint.flush(SelectChannelEndPoint.java:221)
        at org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:818)
        ... 41 more
2010-05-11 22:43:38.463:WARN::Committed before 501 Error. Details logged to the console

个人觉得,应该是页面刷新时,创建了新的长连接,jetty必须关闭先前的长连接,dwr或jetty封装的时候,异常没处理好,应该是其本身的bug.曾尝试用sessionListener去拦截,当请求来的时候,检查有没有先前创建的该url对应的ScriptSession:如有,则去掉,保存本次请求的ScriptSession.但不管用,还没执行到sessionListener异常就打印出来了,也就是说,先前的长连接已经被强制关闭了.
第一次jetty+dwr,很不得要领.

问题补充:
cwx714 写道
可能的原因:
1,你发送的数据不符合规定,比如你发163的邮箱就很可能这样。
2,对方已经发送完了数据,并正常关闭了,你无法再次发送数据了。
3,到达文件末尾,或是文件已经读完后还在读文件。


搞定!
这是 [org.directwebremoting.servlet.ExceptionHandler 41]打印的提示信息,并非是系统异常。下载dwr-2.0.6-src,直接注释该行:
//log.warn("Unhandled Exception", cause);

编译后替换dwr2.0.6.jar中的ExceptionHandler.class
GWT 
2010年5月11日 23:30

1个答案 按时间排序 按投票排序

0 0

采纳的答案

可能的原因:
1,你发送的数据不符合规定,比如你发163的邮箱就很可能这样。
2,对方已经发送完了数据,并正常关闭了,你无法再次发送数据了。
3,到达文件末尾,或是文件已经读完后还在读文件。

2010年5月12日 11:27

相关推荐

    用DWR的comet推,实现多人聊天室

    【描述】: 本文主要探讨如何通过Spring与Direct Web Remoting (DWR)框架的整合,利用Comet技术来构建一个无需刷新页面的多人在线聊天室。Comet是一种实现服务器到客户端实时通信的技术,它解决了传统的Ajax轮询带来...

    面向 Java 开发人员的 Ajax: 使用 Jetty 和 Direct Web Remoting 编写可扩展的 Comet 应用程序

    面向Java开发人员的Ajax技术,特别是与Jetty服务器和Direct Web Remoting (DWR)框架的结合,为创建高性能、可扩展的Comet应用程序提供了强大的工具。Comet是一种Web交互模式,它允许服务器向客户端推送数据,而不...

    DWR学习资料

    :DWR 3.0 上传文件.txt DWR3.0反向Ajax示例.txt DWR3.0学习笔记.txt DWR3.0学习网址.txt dwr分页.doc DWR分页代码.doc DWR中文文档.doc DWR中文文档.pdf dwr做comet的完整实现.doc Spring整合DWR comet 实现无刷新 ...

    DWR推送技术大全 dwr推送聊天实例

    DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现实时通信,它允许JavaScript和服务器端Java代码之间进行直接交互。DWR的主要功能之一是推送技术,这使得服务器可以主动向客户端发送数据,而不仅仅...

    DWR推送数据

    DWR(Direct Web Remoting)是一种Java库,用于在Web应用程序中实现实时的双向通信。它允许JavaScript在客户端与服务器端的Java对象之间进行直接调用,无需刷新页面即可交换数据,从而创建出类似桌面应用的用户体验...

    Jetty中文手册

    如何让一个应用响应一个特定端口 使用JNDI 使用JNDI 在JNDI中配置数据源(DataSource) 内嵌Jetty服务器 内嵌Jetty教程 内嵌Jetty的HelloWorld教程 内嵌Jetty视频 优化Jetty 如何配置垃圾收集 如何配置以支持高负载 ...

    dwr推技术简单案例

    DWR(Direct Web Remoting)是一种Java技术,用于在Web应用程序中实现JavaScript和服务器端Java对象之间的双向通信。这项技术极大地简化了AJAX应用的开发,使得动态更新页面变得更为直观和高效。在这个“dwr推技术...

    DWR.JAR

    DWR (Direct Web Remoting) 是一个开源的Java库,它允许Web应用程序在浏览器和服务器之间进行实时的、双向的通信。DWR的核心功能在于提供了一种方式,使得JavaScript可以直接调用服务器端的Java方法,使得Web应用...

    jquery17_chm

    "j-jetty-dwr-comet-src.tar"可能是一个与Jetty(一个开源的Java Web服务器和HTTP服务器)、Direct Web Remoting (DWR)(允许在浏览器和服务器之间进行实时双向通信的框架)以及Comet(一种用于实现实时Web应用的...

    服务器推--DWR中的push机制-Reverse_Ajax.docx

    DWR(Direct Web Remoting)是一个开源Java库,它实现了服务器推功能,尤其是其2.0版本开始引入的push机制。 1. **Polling(轮询)** 轮询是最基础的模拟服务器推的方式。客户端以一定的频率(如几秒一次)向...

    DWR push机制.pdf(免积分下)

    DWR (Direct Web Remoting) 是一个简化 AJAX 应用程序开发的开源框架。从 DWR 2.0 版本开始,该框架引入了“Push”功能,允许 Web 服务器在无需客户端请求的情况下主动将数据推送给客户端浏览器。这一特性打破了传统...

    Comet,反向Ajax,直接就能跑

    dwr comet 反向ajax实力 直接抛 我打了一个包, 放到Tomcat,jetty下面就能直接跑了 很方便 还有注视 对新手 。。。。很好的

    个人简历(优.选).pdf

    5. **开源框架**: Struts、Spring、Hibernate、Ibatis、Dwr、Jquery、Ext,这些是Java Web开发中的常用框架,分别用于MVC架构、依赖注入、持久化、AJAX、UI等。 6. **数据库技能**: 熟悉Sql2005、Sql2008,了解...

Global site tag (gtag.js) - Google Analytics