简介: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.运行结果