一、DWR介绍
DWR(Direct Web Remoting)是一个web远程调用框架,利用这个框架可以让AJAX变得很简单,通过DWR可以在客户端通过JavaScript直接调用服务器的Java方法并返回值给JavaScript,整个过程就好像通过本地客户端调用一样,DWR通过Java类动态生成JavaScript代码,它的最新版本DWR6.0添加许多特性:如支持Dom Trees的自动配置,支持Spring(JavaScript远程调用Spring bean),更好的浏览器支持,还支持可选的commons-logging日志操作。
二、开发准备工作
DWR需要engine.js、util.js、业务服务.js(框架自动生成,只需配置好路径)、jquery.js以及dwr.jar插件包的支持
现在方式可以在网上下载,也可以通过我的优快云资源地址下载。
相关jar及js下载地址:
点击下载(已包含所有需要的jar及js文件)
源码demo下载地址:
点击下载
三、实现步骤
1、导入需要的框架支持包(DWR.jar)
2、导入js(engine.js、util.js)
3、编写服务调用方法
4、配置dwr.xml配置文件
5、配置web.xml文件
6、编写前台页面
注:我这边直接将关键源码提供给大家参考。
四、源码展示
后台服务方法源码:
package com.xinxin.dwr;
import java.util.Collection;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class SendPushService {
public void send(String msg){
WebContext webContext = WebContextFactory.get();
Collection collection = webContext.getAllScriptSessions();
ScriptBuffer scriptBuffer = new ScriptBuffer();
scriptBuffer.appendScript("callBack(");
scriptBuffer.appendScript(msg);
scriptBuffer.appendScript(")");
Util util = new Util(collection);
util.addScript(scriptBuffer);
}
}
DWR.xml文件配置源码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
<dwr>
<allow>
<create creator="new" javascript="SendPushService">
<param name="class" value="com.xinxin.dwr.SendPushService" />
</create>
</allow>
</dwr>
web.xml文件配置源码:
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<!-- 使用服务器推技术(反转Ajax) -->
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<!-- 使能够从其他域请求true:开启;false:关闭 -->
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
<!-- 允许远程js -->
<init-param>
<param-name>allowScriptTagRemotion</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/js/dwr/*</url-pattern>
</servlet-mapping>
页面使用及实现源码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>dwr-test</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="js/dwr/util.js"></script>
<script type="text/javascript" src="js/dwr/engine.js"></script>
<script type="text/javascript" src="js/dwr/interface/SendPushService.js"></script>
<script type="text/javascript" src="js/jquery-1.9.1.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){
dwr.engine.setActiveReverseAjax(true);
$("#send").click(function(){
var msg = "'"+$("#msg").val()+"'";
SendPushService.send(msg);
});
$(document).keydown(function(event){
if(event.keyCode==13){
$("#send").click();
}
});
});
function callBack(msg){
$("#show").html($("#show").html()+"</br>"+msg);
}
</script>
<body>
<ul id="show"></ul>
<input type="text" id="msg" size="30"/>
<input id="send" type="button" value="submit"/>
</body>
</html>