利用DWR实现网页推送,逆向AJAX的例子, 附源码

摘要: 这段时间需要做一个POC给客户演示,恰好有一个功能是需要从服务端向客户端推送,类似于做移动开发Android,iOS 的功能一样,但是需要在网页端实现,在网上看到最多的就是 comnet 技术的介绍,很多网页聊天或者咨询类似功能就是采用这种技术实现的,当然html5的 websocket 是肯定支持的,但需要点时间去学些,POC时间比较紧,所以我最终采用DWR 来实现,DWR 在多年前就用过来实现AJAX请求,当时印象并不是很好,一直钟情于jquery, 但DWR 的实现方式确实令人印象深刻. 能模拟直接操作java 对象的方式. 为了这个POC 再次采用了 DWR 的逆向AJAX ,也就是从服务端向网页端推送消息的技术.

这段时间需要做一个POC给客户演示,恰好有一个功能是需要从服务端向客户端推送,类似于做移动开发Android,iOS 的功能一样,但是需要在网页端实现,在网上看到最多的就是 comnet 技术的介绍,很多网页聊天或者咨询类似功能就是采用这种技术实现的,当然html5的 websocket 是肯定支持的,但需要点时间去学些,POC时间比较紧,所以我最终采用DWR 来实现,DWR 在多年前就用过来实现AJAX请求,当时印象并不是很好,一直钟情于jquery, 但DWR 的实现方式确实令人印象深刻. 能模拟直接操作java 对象的方式. 为了这个POC 再次采用了 DWR 的逆向AJAX ,也就是从服务端向网页端推送消息的技术. 效果如下:


其实实现并不难,我采用的DWR3.0来做的,具体也就几个地方要注意
1. WEB.XML 的配置

  
    org.directwebremoting.servlet.DwrListener
  
  
  
    dwr-invoker
    org.directwebremoting.servlet.DwrServlet
	
	
     fileUploadMaxBytes
     25000
    
	
    
    
      debug
      true
    
  
	
      accessLogLevel
      runtimeexception
    
    
    
    
      activeReverseAjaxEnabled
      true
    

    
    
      initApplicationScopeCreatorsAtStartup
      true
    

    
    
      jsonRpcEnabled
      true
    

    
    
      jsonpEnabled
      true
    

    
    
      preferDataUrlSchema
      false
    

    1
  
   
  
    dwr-invoker
    /dwr/*
  

也许并用不了这么多配置,但我还是保留了。

2. dwr.xml 的配置
  
    
       
    

重点是这个类的配置,另外javascript="Demo" , 也就说明在测试页面interface 中需要引入Demo.js
3. jsp 页面里面的配置
 
 
 

还要注意的是,在页面的 onload 事件中需要增加:
	dwr.engine.setActiveReverseAjax(true);

4. java 类里的处理方式.
public class DwrDemo{
    
    public static void sendMsg(final String msg){    
        WebContext wctx = WebContextFactory.get();
       // System.out.println(wctx.getCurrentPage());
        Browser.withPage("/MyDWRSample/",new Runnable(){
        public void run(){
            ScriptSessions.addFunctionCall("show", msg);
        }
    });
     
    }

}

要注意上面绑定了要推送的页面,这是重点,只针对具体的页面去推送,做测试时,我用的是调用页面的show 方法,这是一个js方法,用来操作dom元素.

在我的例子中,我模拟了一个servlet 来请求服务,再由server端推送信息到 页面的过程。


源代码下载:DWR 逆向AJAX 推送

上一篇: 判断Httprequest 是否ajax 请求的方法
下一篇: Tomcat 中部署多个应用,自定义应用的启动顺序

Avatar

EmmaGong 评论于: 2016-05-26

Goeasy就不错,专业做web实时推送,服务器稳定,代码简洁易懂,还有中英文,网址是goeasy.io;

Avatar

香港独立IP主机 评论于: 2014-12-11

站长你好,恒创科技买主机送平板,独立IP专享7折,诚邀广告位合作,博主有兴趣可加Q:2954243953
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号