dwr 后台推送技术

2016-11-02 - 1,523 Views - 0 Goods - Nothing

sendMsg.jsp页面 ,发送一段消息给后台 ,然后后台将消息推送到showMsg.jsp页面

web.xml配置


  
  
  dwr3  
    
    index.jsp  
    
      
         dwr-invoker  
         uk.ltd.getahead.dwr.DWRServlet  
           
          debug  
          true  
           
           
           
          pollAndCometEnabled  
          true  
           
         1        
      
      
         dwr-invoker  
         /dwr/*  
      
  


sendMsg.java 推送类


package com.songliguo.dwr;  
  
import java.util.Collection;  
  
import org.directwebremoting.ScriptBuffer;  
import org.directwebremoting.ScriptSession;  
import org.directwebremoting.WebContext;  
import org.directwebremoting.WebContextFactory;  
import org.directwebremoting.proxy.dwr.Util;  
  
public class SendMsg {  
      
    @SuppressWarnings("deprecation")  
    public void sendMsg(String msg){  
        //得到上下文  
        WebContext contex = WebContextFactory.get();  
          
        //得到要推送到 的页面  dwr3为项目名称 , 一定要加上。  
        Collection sessions = contex.getScriptSessionsByPage("/dwr3/showMsg.jsp");  
          
        //不知道该怎么解释这个 ,   
        Util util = new Util(sessions);  
          
        //下面是创建一个javascript脚本 , 相当于在页面脚本中添加了一句  show(msg);   
        ScriptBuffer sb = new ScriptBuffer();  
        sb.appendScript("show(");  
        sb.appendData(msg);  
        sb.appendScript(")");  
          
        //推送  
        util.addScript(sb);  
    }  
}  

dwr.xml配置


  
  
    
          
              
                com.songliguo.dwr.SendMsg  
              
          
      

sendMsg.jsp


<%@ page language="java" contentType="text/html; charset=utf-8"  
    pageEncoding="utf-8"%>  
  
  
  
  
    
  
   
   
  
Insert title here  
    
  
      
      
  
  

showMsg.jsp


<%@ page language="java" contentType="text/html; charset=utf-8"  
    pageEncoding="utf-8"%>  
  
  
  
  
    
   
   
  
Insert title here  
    
  
    

使用dwr推送技术时 需要有WebContext 对象,但是 WebContext 对象需要通过 WebContextFactory.get();获取 , 而WebContextFactory.get(); 方法只有当页面请求某个Java方法时,在该方法中调用WebContextFactory.get(); 才能得到值。 否则是取不到值的。
然后通过WebContext 获取指定的页面 。再向页面推送消息 。

有一个问题是当后来又新开了页面,却收不到消息 。

可以使用一个线程,去定时的更新Collection 对象

  • 支付宝打赏
  • 微信打赏

China.BeiJing

如果说人生是自我编写的程序,那么青春就是其中意味深长的代码