DWR 是一个开放源码的使用 Apache 许可协议的解决方案,它包含服务器端 Java 库、一个 DWR servlet 以及 JavaScript 库。虽然 DWR 不是 Java 平台上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多有用的功能。
从最简单的角度来说,DWR 是一个引擎,可以把服务器端 Java 对象的方法公开给 JavaScript 代码。使用 DWR 可以有效地从应用程序代码中把 Ajax 的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理 XMLHttpRequest 对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成 XML。甚至不再需要编写 servlet 代码把 Ajax 请求调整成对 Java 域对象的调用。
DWR 是作为 Web 应用程序中的 servlet 部署的。把它看作一个黑盒子,这个 servlet 有两个主要作用:首先,对于公开的每个类,DWR 动态地生成包含在 Web 页面中的 JavaScript。生成的 JavaScript 包含存根函数,代表 Java 类上的对应方法并在幕后执行 XMLHttpRequest。这些请求被发送给 DWR,这时它的第二个作用就是把请求翻译成服务器端 Java 对象上的方法调用并把方法的返回值放在 servlet 响应中发送回客户端,编码成 JavaScript。DWR 还提供了帮助执行常见的用户界面任务的 JavaScript 工具函数。
例子一:
一,下载dwr.jar
配置web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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">
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
编写dwr.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="JDate">
<param name="class" value="java.util.Date"/>
</create>
</allow>
</dwr>
test.html
<html>
<head>
<title>DWR - Test Home</title>
<script type='text/javascript' src='dwr/interface/JDate.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script>
function init(){
JDate.toString(load);
}
function load(data){
window.alert("Current Time:"+data);
}
</script>
</head>
<body οnlοad="init()">
</body>
</html>
JDate.js 是 dwr 根据配置文件自动生成的,java.util.Date转化为javascript函数。, engine.js 是 dwr 自带的脚本文件。
dwr demo登陆 :
dwr.xml,
<create creator="new" javascript="CheckName">
<param name="class" value="com.CheckName"/>
<include method="isExists"/>
</create>
<script type='text/javascript' src='dwr/interface/CheckName.js'></script> //调用在dwr.xml中定义的javascript
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<script type="text/javascript">
function checkNames()
{
var name = document.getElementById('name').value;
//CheckName.isExists(name,getResult);
// 那个CheckName是表示咱导入的dwr.xml中javascript这个属性
// isExists表示CheckName这个对象里面一个方法
// (name,getResult)中name表示你要传入的参数,getResult表示回调函数
CheckName.isExists(name,getResult);
}
function getResult(text)
{
if(text)
{
document.getElementById('show').innerHTML="用户名存在";
}else
{
document.getElementById('show').innerHTML="用户名可以使用";
}
}
</script>
用户名:<input type="text" id="name" οnblur="checkNames()"><span id="show"></span>
package com;
public class CheckName{
public boolean isExists(String loginName)
{
if(loginName.equals("admin"))
{
return true;
}
else
{
return false;
}
}
}