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中加入如下内容:
下一步需要建立相应java类com.aneiki.dwr.User:
如果能够显示这些页面,说明dwr的配置文件是正确的,但是如果这些页面正确显示,而自定义页面无法正常工作,那么就需要检查一下自己的javascript是否正确了。需要注意的是必须当DwrServlet类的debug属性为true时才会显示着些页面。
最后建立自己的html文件:
注意如下三个引用:
首先下载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" οnclick="javascript:hello()">
<input type="button" value="clear" οnclick="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类,注意需要把这个引用放在前面两个引用之后。