SpringMvc之整合DWR3.0.0推送消息

下载地址

http://www.directwebremoting.org/dwr/

https://github.com/directwebremoting/dwr/releases

 

本文以DWR3.0.0为例,搭建步骤如下

 

1.下载zip文件包,项目引入dwr3.0.0jar文件

 

2.web.xml增加如下配置 

<servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <!-- 旧版本用org.directwebremoting.servlet.DwrServlet 新版本用uk.ltd.getahead.dwr.DWRServlet -->
        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>activeReverseAjaxEnabled</param-name>
            <param-value>true</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>
    </servlet>

    <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/js/dwr/*</url-pattern>
    </servlet-mapping>

 

 

3.与web.xml同级下增加一个dwr.xml文件

<?xml version="1.0" encoding="UTF-8"?>     
<!DOCTYPE dwr PUBLIC    
    "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"    
    "http://directwebremoting.org/schema/dwr30.dtd">
<dwr>
    <allow>
        <!-- 产生的Js的名称,与前端调用名称一致 -->
        <create creator="new" javascript="mydwr">
            <param name="class" value="com.zns.test.dwr.MyDwr" />
        </create>
    </allow>
</dwr>

 

 

4.增加一个MyDwr类文件

package com.zns.test.dwr;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import com.zns.test.common.DwrUtils;

public class MyDwr {
    public String func1(String name) {
        return "hello: " + name;
    }

    public void func2() {
        Runnable run = new Runnable() {
            private ScriptBuffer scriptBuffer = new ScriptBuffer();
            public void run() {
                // 设置要调用的 js函数及参数
                scriptBuffer.appendCall("addNum", 10, 20);
                // 得到所有ScriptSession
                Collection<ScriptSession> sessions = Browser.getTargetSessions();
                // 遍历每一个ScriptSession
                for (ScriptSession scriptSession : sessions) {
                    scriptSession.addScript(scriptBuffer);
                }
            }
        };
        // 执行推送
        Browser.withAllSessions(run);

        // 或者如下方式调用
        String jsFuncName = "addNum";
        List args = new ArrayList();
        args.add(10);
        args.add(20);
        DwrUtils.invokeJavascriptFunction(jsFuncName, args);
    }
}

 

 

5.增加一个DwrUtils工具类

package com.zns.test.common;

import java.util.Collection;
import java.util.List;
import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;

public class DwrUtils {
    /**
     * 调用页面javascript函数
     * 
     * @param functionName
     *            函数名
     * @param args
     *            参数列表
     */
    public static void invokeJavascriptFunction(String _funcName, List _args) {
        final String funcName = _funcName;
        final List args = _args;
        Browser.withAllSessions(new Runnable() {
            private ScriptBuffer script = new ScriptBuffer();

            public void run() {
                // 拼接javascript
                script = script.appendScript(funcName + "(");
                for (int i = 0; i < args.size(); i++) {
                    if (i != 0) {
                        script = script.appendScript(",");
                    }
                    script = script.appendData(args.get(i));
                }
                script.appendScript(")");
                // System.out.println(script.toString());
                Collection<ScriptSession> sessions = Browser.getTargetSessions();
                for (ScriptSession scriptSession : sessions) {
                    scriptSession.addScript(script);
                }
            }
        });
    }
}

 

6 增加一个jsp页面测试,核心代码如下

<script src="js/jquery.min.js" type="text/javascript"></script>
<script src="js/dwr/engine.js" type="text/javascript"></script>
<script src="js/dwr/interface/mydwr.js" type="text/javascript"></script>
<script type="text/javascript">
        $(function(){
            dwr.engine.setActiveReverseAjax(true);
            
            mydwr.func1("zns",callback1);
            mydwr.func2();
        });
        function callback1(data){
            alert(data);
        }
        function addNum(num1,num2){
            var total= num1+num2;
            alert(total);
        }
</script>

 

7.访问jsp页面 测试效果,基本完毕......

转载于:https://www.cnblogs.com/zengnansheng/p/10385813.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值