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="測試" οnclick="test()"><br/>
    <input type="text" value="" id="text"/>
    <input type="button" value="發送" οnclick="send()">
    <input type="button" value="推送" οnclick="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="測試" οnclick="test()"><br/>
    <input type="text" value="" id="text">
    <input type="button" value="查詢用戶數" οnclick="getUserCount()"><br/>
    <div id="msg"></div>
</body>
</html>

6.spring配置把SpringDwr類加入當中

<!-- spring dwr測試類 -->
<bean id="springDwr" class="com.ss.dwr.SpringDwr"></bean>

 

7.運行結果

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章