java dwr

简介:dwr是一个WEB远程调用框架,一个类似于ajax的框架,它可以将java类转换成js,前端可以不需要ajax请求直接用js调用后端代码。

用法:

一、纯java+dwr3

1.使用dwr需要下载相应架包,使用maven下载

<dependency>
      <groupId>org.directwebremoting</groupId>
      <artifactId>dwr</artifactId>
      <version>3.0.2-RELEASE</version>
</dependency>

    2.需要在web.xml配置以下代码

<!-- dwr配置,会默认加载web-inf/dwr.xml配置 -->
    <servlet>
        <!-- 指定DWR核心Servlet的名字dwr-invoker -->
        <servlet-name>dwr</servlet-name>
        <!-- 指定DWR核心Servlet的实现类 -->
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <!--  指定DWR核心Servlet处于调试状态 -->
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
        <!--  默认会加载WEB-INF/dwr.xml,此处可不配置-->
        <init-param>
            <param-name>config</param-name>
            <!-- 如果有多个用","分开 -->
            <param-value>/WEB-INF/dwr.xml</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>activeReverseAjaxEnabled</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>
    <!-- 指定核心Servlet的URL映射 dwr-invoker-->
    <servlet-mapping>
        <servlet-name>dwr</servlet-name>
        <!-- 指定核心Servlet映射的URL -->
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>

3.在WEB-INF添加dwr.xml配置

<?xml version="1.0" encoding="utf-8"?>
<!-- 指定DWR配置文件的DTD等信息 -->
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
        "http://getahead.org/dwr/dwr30.dtd">
<!-- DWR配置文件的根元素是dwr -->
<dwr>
    <allow>
        <!-- 使用new关键资创建一个Java实例,指定创建的JavaScript对象名为testDwr.js-->
        <create creator="new" javascript="javaDwr">
            <!-- 使用class属性指定创建该Java实例的实现类 -->
            <param name="class" value="com.ss.dwr.JavaDwr"/>
        </create>

        <!-- 从Spring中创建Java对象, 指定创建的JavaScript对象名为springDwr.js-->
        <create creator="spring" javascript="springDwr">
            <!-- 使用beanName属性指定创建该Java实例的实现类 -->
            <!--<param name="beanName" value="com.ss.dwr.SpringDwr"/>-->
            <param name="beanName" value="springDwr"/><!-- 这里不在是使用类路径了,而是使用spring创建的类id -->
        </create>
    </allow>
</dwr>

4.dwr测试类

package com.ss.dwr;

import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import java.util.Collection;
//java dwr测试
public class JavaDwr {

    public String sayHello(){
        return "hello java dwr";
    }
    public String getStr(String str){
        return str;
    }
    //页面推送
    public void pushMsg(final String msg){
        Runnable run = new Runnable(){
            private ScriptBuffer script = new ScriptBuffer();
            public void run() {
                //设置要调用的 js及参数--show是接收页面的js函数方法
                script.appendCall("show" , msg);
                //得到所有ScriptSession
                Collection<ScriptSession> sessions = Browser.getTargetSessions();
                //遍历每一个ScriptSession
                for (ScriptSession scriptSession : sessions){
                    //可以在这里过滤,定向推送消息
                    scriptSession.addScript( script);
                }
            }
        };
        //执行推送
        Browser. withAllSessions(run);
    }
}

5.dwr页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>dwr测试</title>
    <!-- dwr核心js,此js并不在项目当中,而是在dwr架包中 -->
    <script type="text/javascript" src="${basePath}/dwr/engine.js"></script>
    <!-- dwr工具js,也不在项目当中
    <script type='text/javascript' src='${basePath}/dwr/util.js'></script>
    -->
    <!-- 此js不是真正的js,实际就是JavaDwr类的转换映射,在dwr.xml中配置 -->
    <script type='text/javascript' src='${basePath}/dwr/interface/javaDwr.js'></script>
    <script type="text/javascript" src="${basePath}/static/js/jquery-1.11.0.min.js"></script>
</head>
<script>
    function test(){
        javaDwr.sayHello(function(data){
            $("#msg").append(data+"<br/>");
        });
    }
    function send(){
        var text = $("#text").val();
        javaDwr.getStr(text,function(data){
            $("#msg").append(data+"<br/>");
        });
    }
    //将消息推送至另一个页面
    function pushMsg(){
        var text = $("#text").val();
        javaDwr.pushMsg(text);
    }

</script>
<body>
    java dwr测试<br/>
    <input type="button" value="测试" onclick="test()"><br/>
    <input type="text" value="" id="text"/>
    <input type="button" value="发送" onclick="send()">
    <input type="button" value="推送" onclick="pushMsg()"><br/>
    <div id="msg"></div>
</body>
</html>

6.dwr推送接收页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>dwr测试-消息接收</title>
    <!-- dwr核心js,此js并不在项目当中,而是在dwr架包中 -->
    <script type="text/javascript" src="${basePath}/dwr/engine.js"></script>
    <!-- dwr工具js,也不在项目当中
    <script type='text/javascript' src='${basePath}/dwr/util.js'></script>
    -->
    <!-- 此js不是真正的js,实际就是JavaDwr类的转换映射,在dwr.xml中配置 -->
    <script type='text/javascript' src='${basePath}/dwr/interface/javaDwr.js'></script>
    <script type="text/javascript" src="${basePath}/static/js/jquery-1.11.0.min.js"></script>
</head>
<script>
    //这个方法用来启动该页面的ReverseAjax功能
    dwr.engine.setActiveReverseAjax(true);
    //设置在页面关闭时,通知服务端销毁会话
    dwr.engine.setNotifyServerOnPageUnload(true);
    //这个函数是提供给后台推送的时候 调用的
    function show(data){
        $("#msg").append(data+"<br/>");
    }
</script>
<body>
    java dwr测试--消息推送接收<br/>
    <div id="msg"></div>
</body>
</html>

7.运行结果

二、spring4 + dwr3整合

1.下载dwr包,与上面一致

2.在web.xml加入dwr配置,与上面一致

3.在WEB-INF下添加dwr.xml配置,与上面一致(spring3可以在spring配置中导入dwr可以直接使用dwr标签,spring4不支持,网上看的在spring配置中加的都是spring4以下)

4.spring-dwr测试类

package com.ss.dwr;
import com.ss.service.system.UserService;
import org.springframework.beans.factory.annotation.Autowired;
//spring dwr测试类
public class SpringDwr {
    @Autowired
    private UserService userService;
    public String sayHello(){
        return "hello spring dwr";
    }
    public int getUserCount(String text){
        return userService.getUserCount(0,text);
    }
}

5.spring-dwr页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>dwr测试</title>
    <!-- dwr核心js,此js并不在项目当中,而是在dwr架包中 -->
    <script type="text/javascript" src="${basePath}/dwr/engine.js"></script>
    <!-- dwr工具js,也不在项目当中
    <script type='text/javascript' src='${basePath}/dwr/util.js'></script>
    -->
    <!-- 此js不是真正的js,实际就是JavaDwr类的转换映射,在dwr.xml中配置 -->
    <script type='text/javascript' src='${basePath}/dwr/interface/springDwr.js'></script>
    <script type="text/javascript" src="${basePath}/static/js/jquery-1.11.0.min.js"></script>
</head>
<script>
    function test(){
        springDwr.sayHello(function(data){
            $("#msg").append(data+"<br/>");
        });
    }
    function getUserCount(){
        var text = $("#text").val();
        springDwr.getUserCount(text,function(data){
            $("#msg").append(data+"<br/>");
        });
    }
</script>
<body>
    spring dwr测试<br/>
    <input type="button" value="测试" onclick="test()"><br/>
    <input type="text" value="" id="text">
    <input type="button" value="查询用户数" onclick="getUserCount()"><br/>
    <div id="msg"></div>
</body>
</html>

6.spring配置把SpringDwr类加入当中

<!-- spring dwr测试类 -->
<bean id="springDwr" class="com.ss.dwr.SpringDwr"></bean>

 

7.运行结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值