下载地址
http://www.directwebremoting.org/dwr/
https://github.com/directwebremoting/dwr/releases
本文以DWR3.0.0为例,搭建步骤如下
1.下载zip文件包,项目引入dwr3.0.0jar文件
2.web.xml增加如下配置
<servlet> <servlet-name>dwr-invoker</servlet-name> <!-- 旧版本用org.directwebremoting.servlet.DwrServlet 新版本用uk.ltd.getahead.dwr.DWRServlet --> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>activeReverseAjaxEnabled</param-name> <param-value>true</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> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/js/dwr/*</url-pattern> </servlet-mapping>
3.与web.xml同级下增加一个dwr.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://directwebremoting.org/schema/dwr30.dtd"> <dwr> <allow> <!-- 产生的Js的名称,与前端调用名称一致 --> <create creator="new" javascript="mydwr"> <param name="class" value="com.zns.test.dwr.MyDwr" /> </create> </allow> </dwr>
4.增加一个MyDwr类文件
package com.zns.test.dwr; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.directwebremoting.Browser; import org.directwebremoting.ScriptBuffer; import org.directwebremoting.ScriptSession; import com.zns.test.common.DwrUtils; public class MyDwr { public String func1(String name) { return "hello: " + name; } public void func2() { Runnable run = new Runnable() { private ScriptBuffer scriptBuffer = new ScriptBuffer(); public void run() { // 设置要调用的 js函数及参数 scriptBuffer.appendCall("addNum", 10, 20); // 得到所有ScriptSession Collection<ScriptSession> sessions = Browser.getTargetSessions(); // 遍历每一个ScriptSession for (ScriptSession scriptSession : sessions) { scriptSession.addScript(scriptBuffer); } } }; // 执行推送 Browser.withAllSessions(run); // 或者如下方式调用 String jsFuncName = "addNum"; List args = new ArrayList(); args.add(10); args.add(20); DwrUtils.invokeJavascriptFunction(jsFuncName, args); } }
5.增加一个DwrUtils工具类
package com.zns.test.common; import java.util.Collection; import java.util.List; import org.directwebremoting.Browser; import org.directwebremoting.ScriptBuffer; import org.directwebremoting.ScriptSession; public class DwrUtils { /** * 调用页面javascript函数 * * @param functionName * 函数名 * @param args * 参数列表 */ public static void invokeJavascriptFunction(String _funcName, List _args) { final String funcName = _funcName; final List args = _args; Browser.withAllSessions(new Runnable() { private ScriptBuffer script = new ScriptBuffer(); public void run() { // 拼接javascript script = script.appendScript(funcName + "("); for (int i = 0; i < args.size(); i++) { if (i != 0) { script = script.appendScript(","); } script = script.appendData(args.get(i)); } script.appendScript(")"); // System.out.println(script.toString()); Collection<ScriptSession> sessions = Browser.getTargetSessions(); for (ScriptSession scriptSession : sessions) { scriptSession.addScript(script); } } }); } }
6 增加一个jsp页面测试,核心代码如下
<script src="js/jquery.min.js" type="text/javascript"></script> <script src="js/dwr/engine.js" type="text/javascript"></script> <script src="js/dwr/interface/mydwr.js" type="text/javascript"></script> <script type="text/javascript"> $(function(){ dwr.engine.setActiveReverseAjax(true); mydwr.func1("zns",callback1); mydwr.func2(); }); function callback1(data){ alert(data); } function addNum(num1,num2){ var total= num1+num2; alert(total); } </script>
7.访问jsp页面 测试效果,基本完毕......