dwr消息推送---向指定用户推送

页面消息推送:

第一步:导入需要的两个Jar包:(下载地址:http://directwebremoting.org/dwr/downloads/index.html

· dwr.jar

· commons-logging-1.1.1.jar

第二步:web.xml文件中添加 (目录在WebContent/WEB-INF/lib/下)

  <servlet>
  	<servlet-name>dwr-invoker</servlet-name>
  	<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>

     <!-- 指定DWR核心Servlet处于调试状态 -->
      <init-param>
          <param-name>debug</param-name>
          <param-value>true</param-value>
      </init-param>
      <!-- 设置使用反向Ajax技术 -->
      <init-param>
          <param-name>activeReverseAjaxEnabled</param-name>
         <param-value>true</param-value>
     </init-param>    
     <!--长连接只保持时间 -->
     <init-param>
         <param-name>maxWaitAfterWrite</param-name>
         <param-value>3000</param-value>
     </init-param>  
     <init-param>  
           <param-name>crossDomainSessionSecurity</param-name>  
             <param-value>false</param-value>   
      </init-param>
      <init-param>  
          <param-name>allowScriptTagRemoting</param-name>  
          <param-value>true</param-value>  
        </init-param> 
        <init-param>  
          <param-name>classes</param-name>  
          <param-value>java.lang.Object</param-value>  
        </init-param>   
        <init-param>  
           <param-name>initApplicationScopeCreatorsAtStartup</param-name>  
           <param-value>true</param-value>  
        </init-param> 
         <init-param>  
            <param-name>logLevel</param-name>  
            <param-value>WARN</param-value>  
        </init-param>
  </servlet>
  
  
  <servlet-mapping>
  	<servlet-name>dwr-invoker</servlet-name>
  	<url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>

第三步:创建dwr.xml文件 (放在与web.xml同一个目录下)

<!DOCTYPE dwr PUBLIC  
     "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"  
     "http://getahead.org/dwr/dwr30.dtd"> 
<dwr>  
     <allow>  
          <create creator="new" javascript="MessagePush">  
            <param name="class" value="com.videocon.util.MessagePush"/>  
         </create>  
          <create creator="new" javascript="TestPush">  
            <param name="class" value="com.videocon.util.Test"/>  
         </create>  
     </allow>  
</dwr>  

第四步:根据dwr.xml文件暴露出的class,写具体的类

MessagePush.java

public class MessagePush{
   public void onPageLoad(String userName) {  
  
       ScriptSession scriptSession = WebContextFactory.get().getScriptSession();  
  
       scriptSession.setAttribute(userName, userName);  
  
       DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();  

       try {  
  
              dwrScriptSessionManagerUtil.init();  
              System.out.println("cacaca");  
  
       } catch (ServletException e) {  
  
              e.printStackTrace();  
  
       }  
   }
}
Test.java

public class Test{  
    public static void sendMessageAuto(String username, String message){  
          
        final String userName = username;  
        final String autoMessage = message;  
        Browser.withAllSessionsFiltered(new ScriptSessionFilter() {  
            public boolean match(ScriptSession session){  
            	System.out.println(session.getAttribute("userName"));
                if (session.getAttribute("userName") == null)  
                    return false;  
                else  
                    return (session.getAttribute("userName")).equals(userName);  
            }  
        }, new Runnable(){  
              
            private ScriptBuffer script = new ScriptBuffer();  
              
            public void run(){  
                  System.out.println("进入方法。。。");
                  script.appendCall("showMessage",autoMessage);  
                  
                Collection<ScriptSession> sessions = Browser.getTargetSessions();  
                for (ScriptSession scriptSession : sessions){  
                    scriptSession.addScript(script);  
                }  
            }  
        });  
    }  
 }  
还要添加一个工具类DwrScriptSessionManagerUtil.java

public class DwrScriptSessionManagerUtil extends DwrServlet{  
	  
    private static final long serialVersionUID = -7504612622407420071L;  
  
    public void init()throws ServletException {  
  
           Container container = ServerContextFactory.get().getContainer();  
           ScriptSessionManager manager = container.getBean(ScriptSessionManager.class);  
           ScriptSessionListener listener = new ScriptSessionListener() {  
                  public void sessionCreated(ScriptSessionEvent ev) {  
                         HttpSession session = WebContextFactory.get().getSession();  
  
                         String userName =((PersonInfo) session.getAttribute("person")).getUsername()+"";
                         System.out.println("a ScriptSession is created!");  
                         ev.getSession().setAttribute("userName", userName);  
                  }  
                  public void sessionDestroyed(ScriptSessionEvent ev) {  
                         System.out.println("a ScriptSession is distroyed");  
                  }  
           };  
           manager.addScriptSessionListener(listener);  
    } 
}

第五步:写推送端的界面:

具体我就不写了,这里只写跟推送有关的jsp页面代码。

1.先引入js,engine.js 文件 是dwr的引擎文件,util.js 是dwr自带的工具js,TestPush.js就是你在dwr.xml文件中配置的javaScript的别名,这里只需要引入即可.

<script type="text/javascript" src="${ctx!}/dwr/engine.js"></script>
<script type="text/javascript" src="${ctx!}/dwr/util.js"></script>
<script type="text/javascript" src="${ctx!}/dwr/interface/TestPush.js"></script>
2.页面js代码

 $("#button").click(function(){
        test();	
});
     	  
function test() {  
      var msg = $("#username").val(); 
      console.log("推送中。。。"+msg);
      TestPush.sendMessageAuto(msg,"哈哈哈");  
              
 }  

第六步:写接收端的界面

1.先引入js,engine.js 文件 是dwr的引擎文件,util.js 是dwr自带的工具js,MessagePush.js就是你在dwr.xml文件中配置的javaScript的别名,这里只需要引入即可.

<script type="text/javascript" src="${ctx!}/dwr/engine.js"></script>
<script type="text/javascript" src="${ctx!}/dwr/util.js"></script>
<script type="text/javascript" src="${ctx!}/dwr/interface/MessagePush.js"></script>
2.页面代码

 $(document).ready(function(){
	onPageLoad();
	dwr.engine.setActiveReverseAjax(true);
	dwr.engine.setNotifyServerOnPageUnload(true);
		
});
     	  
//通过该方法与后台交互,确保推送时能找到指定用户  
function onPageLoad(){ 
  
	 var xx = 'username';
	 MessagePush.onPageLoad(xx);  

}  
 //推送信息  
function showMessage(autoMessage){  
    alert(autoMessage);//获取推送信息
      
                     
} 






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值