最近学习dwr的reverse ajax,自己写一个web聊天小程序,基本上和官方的例子差不多,但是,最后却出了个小问题
两个客户端可以聊天,但是别人的聊天信息只有自己向服务器端发送请求后能看到。
初步判断是reverse ajax没管用,查看了jsp页面和web.XML,发现reverse ajax都启用了,
于是用firedebug调试下,出现如下错误:
http://localhost:8080/chat/$%7BdefaultPath%7D/call/plainpoll/ReverseAjax.dwr,404错误。
显然是地址不对,地址中本来应该是“dwr”的地方,被替换成了“$%7BdefaultPath%7D”,不知道是怎么回事?
在chrome中也调试了一下,输出错误信息:
POSThttp://localhost:8080/chat/$%7BdefaultPath%7D/call/plainpoll/ReverseAjax.dwr 404 (Not Found)
Reverse Ajaxpoll failed (pollRetries=1): dwr.engine.http.404 : Not Found Giving up.
汗,调了一晚上没解决,第二天早上,把官方的例子重新看了一下,一一对比,发现了一个很有趣的地方,在jsp页面中,我引用的engine.js和util.js都是自己在web项目根目录下创建的js包中的,如:
<script type="text/javascript" src="dwr/interface/Chat.js"></script>
<script type="text/javascript"src="js/engine.js"></script>
<script type="text/javascript" src="js/util.js"></script>
官方例子中jsp页面引用js如下:
<script type="text/javascript" src="dwr/interface/Chat.js"></script>
<script type="text/javascript"src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
官方例子中引用的两个js,我在web项目中根本没找到dwr这个文件夹,也没有两个js,不过,其WEB-INF/lib中引用的dwr.jar中有,在org/ directwebremoting文件夹下
于是我大胆的将自己jsp页面中js引用,也改成了上面官方例子中的引用方式,
结果,嘿嘿,成功了!
至于能引用的原因,貌似是页面引用的js可以是WEB-INF/lib下的jar包中文件,引用的规则是:jar包名称 + “/” + jar包自己classpath,
如引用dwr.jar,而它的engine.js在org/directwebremoting目录下,而org/directwebremoting目录貌似就在classpath中,所以在jsp页面中的引用方式为
src=“dwr/engine.js”。
至于能解决reverse ajax成功运行的原因,貌似是dwr自己加载的问题,汗,很大胆的猜测。
不知是不是上述原因,看到贴的兄弟,如知道原因,告诉一声,谢谢呵!