簡介: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.運行結果