下面我们通过一个简单的入门项目来讲解DWR的配置。
首先新建一个maven项目,结构如下:
1 引入依赖
<dependency><groupId>org.directwebremoting</groupId><artifactId>dwr</artifactId><version>3.0.0-RELEASE</version></dependency>
2 配置web.xml
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app id="dwr" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><display-name>Archetype Created Web Application</display-name><listener><!-- version 2 * --><!-- <listener-class>org.directwebremoting.servlet.DwrServlet</listener-class> --><!-- 2.x 和3.x版本的都可以 --><!-- <listener-class>org.directwebremoting.servlet.DwrServlet</listener-class> --><!-- 3.x版本的还可以使用下面这个 --><listener-class>uk.ltd.getahead.dwr.DWRServlet</listener-class></listener><servlet><servlet-name>dwr-invoker</servlet-name><!-- version 2 * --><!-- <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> --><!-- 2.x 和3.x版本的都可以 --><!-- <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> --><!-- 3.x版本的还可以使用下面这个 --><servlet-class>uk.ltd.getahead.dwr.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>allowScriptTagRemoting</param-name><param-value>true</param-value></init-param></servlet><servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping>
</web-app>
说明:
<url-pattern>/dwr/*</url-pattern> 中dwr是dwr中配置的路径,util.js和engine.js都在dwr下面配置。具体见页面中导入js的说明。
3 新建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><create creator="new" javascript="service"><param name="class" value="test.Service"/></create></allow>
</dwr>
说明:
<create creator="new" javascript="service">,creator的属性值固定,可以是new,struts,spring,不是随意取名,javascript的值是在页面中调用的名称。
<param name="class" value="test.Service"/>中的value为调用java类的全路径
4 编写push方法
package test;public class Service {public String sayHello(String name) {String msg = " hello " + name;return msg;}
}
5 前端页面触发push方法和回调函数显示推送消息
<%@ page language="java" pageEncoding="UTF-8"%><html>
<head><title>My JSP 'first_dwr.jsp' starting page</title><script type='text/javascript' src='/dwr/util.js'></script><script type='text/javascript' src='/dwr/engine.js'></script><script type='text/javascript' src='/dwr/interface/service.js'></script><script type="text/javascript">function firstDwr(){service.sayHello(document.getElementById('data').value,callBackHello);}function callBackHello(data){alert(data)}</script>
</head>
<body>
<tr><td><input id="data" type="text" name="data" /><input type="button" name="but" value="测 试" onclick="firstDwr()"></td>
</tr>
</body>
</html>
说明:
<script type='text/javascript' src='/dwr/util.js'></script> /dwr/是web.xml中配置的
<script type='text/javascript' src='/dwr/engine.js'></script> /dwr/是web.xml中配置的
<script type='text/javascript' src='/dwr/interface/service.js'> /dwr/是 web.xml 中配置的,service.js 是在 dwr 中配置的文件名,如下图:
一定要统一,否则浏览器会报“对象未初始化错误”;按照这样的配发dwr就可以使用了,如果还想更深的学习和使用,你只需将 java 类继续改造或者 dwr.xml 文件继续配置。
注意事项:
无需将 util.js 和 engine.js 拷贝到项目的 js 目录下面;
Js 引入的时候,是 web.xml 中配置的路劲,如/dwr/*。
输入文本点击测试会返回数据,效果如下: