DWR入门实例

来源:互联网 发布:黑客帝国4矩阵复活迅雷 编辑:程序博客网 时间:2024/05/17 23:36
DWR是一个RPC的库,程序员可以通过它轻松的在javascript中调用java函数,也可以从java调用javaScript函数。本文基于DWR的官方帮助文档介绍一个基本的DWR实例。

首先下载dwr.jar包:http://java.net/projects/dwr/downloads/download/DWR_3.x/3.0_RC2/dwr.jar,将其放在web project的 WEB-INF/lib目录下。

由于DWR依赖Commons Logging,因此还需要下载commons-logging.jar包,同样要放在WEB-INF/lib目录下。下载地址为:http://commons.apache.org/logging/download_logging.cgi

在WEB-INF/web.xml中加入如下内容:
<servlet><display-name>DWR Servlet</display-name><servlet-name>dwr-invoker</servlet-name><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class><init-param><param-name>debug</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-INF目录下创建dwr.xml文件(与web.xml文件在同一目录下),如下所示:
<?xml version="1.0" encoding="UTF-8"?>   <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"><dwr><allow><create creator="new" javascript="JUser"><param name="class" value="com.aneiki.dwr.User" /></create></allow></dwr>   

在dwr.xml配置文件中定义了可以通过javascript构造并远程使用的类,javascript中的类JUser对应于java中的类com.aneiki.dwr.User,creator属性为“new”表示使用java beans的默认构造函数。


下一步需要建立相应java类com.aneiki.dwr.User:
package com.aneiki.dwr;public class User {public String sayHello() {return "hello, dwr!";}}
部署项目,启动tomcat,进入链接http://localhost:8080/[YOUR-WEBAPP-CONTEXT]/dwr/,此时可以在页面中看到你在dwr.xml文件中配置的类。你可以点击进入,里面列出了这些类可以被调用的方法。
如果能够显示这些页面,说明dwr的配置文件是正确的,但是如果这些页面正确显示,而自定义页面无法正常工作,那么就需要检查一下自己的javascript是否正确了。需要注意的是必须当DwrServlet类的debug属性为true时才会显示着些页面。

最后建立自己的html文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><script type='text/javascript' src='/dwrDemo/dwr/engine.js'></script><script type='text/javascript' src='/dwrDemo/dwr/util.js'></script><script type='text/javascript' src='/dwrDemo/dwr/interface/JUser.js'></script><script language="javascript">  function callback(str) {dwr.util.setValue("name", str);}     function hello() {    JUser.sayHello(callback);    }    function clearName(){          dwr.util.setValue("name", "");     }  </script></head><body><input type="button" value="hello" onclick="javascript:hello()"><input type="button" value="clear" onclick="javascript:clearName()"><br><br><input type="text" id="name"></body></html>
其中JUser.sayHello(callback)函数的参数是一个回调函数,JUser.sayHello()函数接受com.aneiki.dwr.User类的sayHello()方法的返回值,然后将其作为回调函数的第一个实参。

注意如下三个引用:

<script type='text/javascript' src='/dwrDemo/dwr/engine.js'></script><script type='text/javascript' src='/dwrDemo/dwr/util.js'></script><script type='text/javascript' src='/dwrDemo/dwr/interface/JUser.js'></script>
其中dwrDemo是我的web project的名字,请记得将其换成自己的web project的工程名。/dwrDemo/dwr/interface/JUser.js是dwr根据配置文件自动生成的javascript类,注意需要把这个引用放在前面两个引用之后。
原创粉丝点击