日期:2014-05-17  浏览次数:20767 次

DWR推送问题
我不大理解推送是个什么意思!!百度+谷歌了很多文章好的都是差不多的。虽然看明白了一部分但是这个推送究竟是什么意思?我的理解是:比如国庆到了,我们网站有个什么优惠的活动想要告诉用户。这个时候就可以选择推送来实现。即,在线的所有用户都能收到一个“从网站右下角弹出的一个小窗体”。内容比如:喜迎国庆,XXXX优惠啦,赶紧来购买吧!
有点和QQ那种:某某评论了你的文章。那种效果差不多。(只不过QQ是针对某一个人,而我是推给全部用户)
我就是这么理解推送的。不知道对不对。
如果这样理解是对的 那么现在就有几个问题了:
所有在我的网站的用户都能收到我的消息,看上去不是用户主动“点击某个连接”而得到的。而是服务器自动推过来的。那么这里有个小小问题,服务器是怎么推过来的?意思就是说 肯定还是有个请求触发了某个方法,才能吧消息推出去吧。但是客服端用户没有请求啊,那就是服务器请求的了!
好了如果描述还不狗清楚,找了一个简单推送的例子 如下:
原理什么的就是采用DWR的框架来做的推送:看看代码例子:
dwr和xml的必须的配置就不贴了 。
下面是推送的实现。

   1. public class SendPushService {  
2. //发送消息   
3. public void send(String msg) {  
4. System.out.println("==========调用了send方法==========");  
5. ScriptBuffer scriptBuffer = new ScriptBuffer(); //构造js脚本   
6. WebContext webContext=WebContextFactory.get();  
7. ScriptSession myScSession = webContext.getScriptSession();  
8. scriptBuffer.appendScript("dwrtest(");  
9. scriptBuffer.appendData(msg);  
10. scriptBuffer.appendScript(")");  
11. Util util = new Util(myScSession);  
12. util.addScript(scriptBuffer); //向客户端推送消息   
13. }  
14. }  


关键是这个页面:

   1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
3. <html xmlns=" http://www.w3.org/1999/xhtml">  
4. <head>  
5. <base href="${basePath }" />  
6. <script type='text/javascript' src='${basePath}dwr/engine.js'></script>  
7. <script type='text/javascript' src='${basePath}dwr/util.js'></script>  
8. <script type='text/javascript' src='${basePath}dwr/interface/SendPushService.js'></script>  
9. <script type="text/javascript">  
10. function hello(){  
11. SendPushService.send("第一个dwr推程序");  
12. }  
13. /**由dwr在后台调用这个方法**/  
14. function dwrtest(data){  
15. alert(data);  
16. }  
17. </script>  
18. <title>第一个dwr推程序</title>  
19. </head>  
20. <body onload="dwr.engine.setActiveReverseAjax(true);">  
21. <input type="button" value="点击我" onclick="hello();" />