它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet中获取数据.另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容. DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码.这样WEB开发人员就可以在JavaScript里使用Java代码就像它们是浏览器的本地代码(客户端代码)一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器的资源.出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用.
<allow>标签中包括可以暴露javascript访问的东西。
<create>标签中指定javascript中可以访问的java类,并定义DWR应当如何获得要进行远程的类的实例。creator="new"属性指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例,其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。javascript=" testClass "属性指定javascript代码访问对象时使用的名称。标签指定要公开给javascript的java类名。
<include>标签指定要公开javascript的方法。不指定的话就公开所有方法。
<exclude>标签指定要防止被访问的方法。
入门视频:
http://www.verycd.com/groups/@g1897244/737357.topic
拓展阅读:
http://baike.baidu.com/view/73492.htm
http://blog.csdn.net/zhaizhanpo/archive/2008/09/27/2988512.aspx
http://blog.csdn.net/caterpillar_here/archive/2006/09/06/1186566.aspx
三.实例
先下载DWR的JAR包,下载地址:
http://getahead.ltd.uk/dwr/
将demo(dwr-3.0.0.116.rc1-src\core\impl\demo\web\WEB-INF\lib)实例下的jar文件导入新建项目的web-inf/lib目录下,另外还要加入dwr.jar.
(注意:要加入commons-logging-1.0.4.jar,缺少有时候会报错.)
1.在web.xml文件中注册DWRServlet:负责处理客户端的请求,并呼叫Java物件的是DWRServlet
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
5 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
6 <servlet>
7 <servlet-name>dwr-invoker</servlet-name>
8 <servlet-class>
9 org.directwebremoting.servlet.DwrServlet
10 </servlet-class>
11 <init-param>
12 <param-name>debug</param-name>
13 <param-value>true</param-value>
14 </init-param>
15 </servlet>
16
17 <servlet-mapping>
18 <servlet-name>dwr-invoker</servlet-name>
19 <url-pattern>/dwr/*</url-pattern>
20 </servlet-mapping>
21 </web-app>
2.编写Java物件,即业务Bean:
1 package helloWorld;
2
3 public class Service {
4
5 public String sayHello(String yourName) {
6 //可以是访问数据库的复杂代码
7 return "Hello World " + yourName;
8 }
9 }
3.编写dwr.xml:客户端要呼叫这个Java物件,传给它参数,而返回一個字串,客戶端再展示这个字串,很神奇吧?其实就是是要告訴DWRServlet这件事情:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
3 <dwr>
4 <allow>
5 <create creator="new" javascript="service">
6 <param name="class" value="helloWorld.Service" />
7 </create>
8 </allow>
9 </dwr>
4.测试DWR
将代码放入应用服务器(比如Tomcat),启动。然后在地址栏输入http://localhost:8080/你的工程/dwr

5.编写一个jsp
接下来最后一步就是创建一个jsp文件
1) 要引用几个dwr的js,其中engine.js必须要,如果需要用到dwr提供的一些方便的工具要引用util.js
2) 然后还要引用dwr自动生成的js,dwr/interface/service.js,注意js名字要和dwr.xml配置的一样
3) js里的service.sayHello和java类的那个有一点区别,多了个参数,用来callback返回的数据
index.jsp
1 <%@ page language="java" pageEncoding="UTF-8"%>
2 <html>
3 <head>
4 <title>testDWR</title>
5 <script type='text/javascript' src='dwr/util.js'> </script>
6 <script type='text/javascript' src='dwr/engine.js'> </script>
7 <script type="text/javascript" src="dwr/interface/service.js"></script>
8 <script type="text/javascript">
9 function firstDwr() {
10 service.sayHello("Jorwen", callBackHello);
11 }
12 function callBackHello(data) {
13 alert(data);
14 }
15 </script>
16 </head>
17 <body>
18 <input type="button" name="button" value="测试" onclick="firstDwr();">
19 </body>
20 </html>
6.地址栏输入http://localhost:8080/你的工程/index.jsp 显示的结果如下: