我狂晕! 妈的~ 居然... 找了半天网上居然没有DWR 3.0 的 反相Ajax的例子代码! 全是2.x的代码! 我郁闷了!
没办法,项目需求,硬着头皮上吧,狂看了官方的文档 (说实话,是我看过的最烂的文档) 终于,搞出了一个例子,有点烂,不过,还算是反相Ajax,而且没有一个类是官方“抛弃的” (也就是建议不使用的类) 如下: <create creator="new" javas 基本的dwr开放类配置 public class CharOnline { public void TestAjax() { 这个就是处理类,可以看到比2.x的时候精简了很多! 它的主要功能就是,String page存放的是你需要 服务器推送 数据的网页! 这个和2.x有很多区别,2.x的时候,是需要你自己保存 访问某个页面的用户的sessionId来成为列表 而3.x是以一个页面为单位,只要是访问了这个页面的用户,都会被推送数据 当然个例子是最最简单的例子,其实推送的列表是可以自己变更和筛选的 (dwr提供了Filter,要区别哦,不是web.xml那个Filter)
DWR会开启一个线程作为推送的线程(其实是遍历存在列表的用户,然后推送数据) ScriptSessions.addFunctionCall(); 这个是推送的js指令 也就是说DWR所做的反向Ajax,推送的不是字符串,不是json对象,而是推送 js 代码! addFunctionCall(" js function name " ," parameters " ); 这个就是推送一行js代码,调用了你的页码的js函数! (当然还有很多函数,有的可以直接发送你想执行的js函数)
页面端: dwr.engine.setActiveReverseAjax(true); 启用反向Ajax(这个是 服务器推模式 而不是长连接 和 轮询 ) 然后 function test(){ test 是 用户点击的时候执行的函数,也就是发送ajax请求 test2是 服务器推时的响应函数,可以带参数(从后台传过来的),这里只是简单的打印 (上面的函数对应 服务器端的 ScriptSessions.addFunctionCall("test2",null);)
这样的效果是,你开多个浏览器,访问同个页面(有反ajax的页面),那么只要有一个浏览器 点击发送,那么全部的浏览器都会打印"Test Success!"
我拿它做在线聊天,你呢? |
|