`
sushaojun
  • 浏览: 5754 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类

jetty+dwr实现Comet Web应用 ,怎么总出现异常:"远程主机强迫关闭了一个现有的连接"

阅读更多
项目中需要实现Comet push机制,采用jetty7+dwr2.06。当页面刷新时,经常会出现异常信息,但异常并不妨碍功能的实现,照样可以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。不知大家有什么看法,本人也是初次使用。
分享到:
评论
1 楼 sushaojun 2010-05-12  
搞定!
这是 [org.directwebremoting.servlet.ExceptionHandler 41]打印的提示信息,下载dwr-2.0.6-src,直接注释该行:
//log.warn("Unhandled Exception", cause);

编译后替换dwr2.0.6.jar中的ExceptionHandler.class

相关推荐

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

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

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

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

    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推送技术通过Comet实现了高效的服务器到客户端的数据推送,简化了实时Web应用的开发。结合提供的源码示例"j-jetty-dwr-comet-src",开发者可以深入理解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