DWR使用流程
1:DWR在WEB中的配置
1.1需要引入的JAR包
dwr.jar和commons-loggin.jar
1.2在web.xml中的配置
在web.xml中需要加入如下的配置,配置文件为:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.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>
1.3在dwr.xml中的配置
在WEB-INF目录下的web.xml旁边创建一个dwr.xml文件,DWR配置文件定义了那些DWR会创建提供远程调用的Javascript类。
配置说明:
dwr.xml的业务组件发布和调用规则配置部分Allow:
一、create元素 这个元素是配置后台业务组件的创建规则和组件方法的访问规则。
二、convert元素 这个元素是配置Java对象和数据类型对应的转换器。DWR内置了所有java基本数据类型的转换器。基本数据类型的对象形式也采用同一的转换器转换。
dwr.xml的业务组件方法签名配置部分Signatures(实例):
<signatures>
<![CDATA[
import java.util.ArrayList;
import java.util.List;
import com.tech.dwr.UserDWR;
import com.tech.dwr.User;
UserDWR.getUserListSignatures(List<User>);
]]>
</signatures>
2:DWR实例
2.1配置dwr.xml
<!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="js_UserDWR">
<param name="class" value="com.tech.dwr.UserDWR"/>
<include method="user_Check"/>
<include method="getUser"/>
<include method="maps"/>
<include method="getUserList"/>
<include method="getUserListSignatures"/>
</create>
<convert match="com.tech.dwr.User" converter="bean">
<param name="include" value="id,name"></param>
</convert>
</allow>
<signatures>
<![CDATA[
import java.util.ArrayList;
import java.util.List;
import com.tech.dwr.UserDWR;
import com.tech.dwr.User;
UserDWR.getUserListSignatures(List<User>);
]]>
</signatures>
</dwr>
2.2配置Java相关类
(1):创建User类
package com.tech.dwr;
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.3返回普通类型测试(简单验证测试)
(1):相关JAVA类
package com.tech.dwr;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 描述:DWR测试类
* @author xq
*/
public class UserDWR {
//返回普通类型测试
public String user_Check(String name) {
if("xq".equals(name)) {
return "0000";
}
return "1";
}
}
(2):相关JSP代码
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+
":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type='text/javascript'
src='<%=path%>/dwr/interface/js_UserDWR.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/engine.js'></script>
<title>DWR测试页面</title>
</head>
<body>
<div style="float:left">
用户名:<input type="text" name="username" id="username" onchange="check()"/>
<input type="submit" value="提交" onclick="checkUserSignatures()">
</div>
<div style="float:left;margin-left:10px;font-size:13px;color:#FF0000"
id="context"></div>
</body>
<script type="text/javascript">
//dwr返回基本类型
function check() {
var user_name = document.getElementById("username").value;
js_UserDWR.user_Check(user_name,function(rs){
if(rs==0000) {
document.getElementById("context").innerHTML = "用户名正确";
} else {
document.getElementById("context").innerHTML = "用户名错误";
}
});
}
</script>
</html>
2.4返回类型为对象的测试
(1):在UserDWR类中加入如下方法:
//返回对象测试
public User getUser() {
User user = new User();
user.setId(1);
user.setName("xiongqi");
return user;
}
(2):在login.jsp加入如下js函数
//dwr返回对象类型
function checkUser() {
js_UserDWR.getUser(function(rs){
alert("对象类型返回结果为:" + rs.id + "-----" + rs.name);
});
}
(3):把提交按钮的onclick事件换成checkUser()
2.5返回map测试
(1):在UserDWR类中加入如下方法:
//返回map测试
public Map<String,String> maps() {
Map<String,String> map = new HashMap<String,String>();
map.put("map1","xqMap1");
map.put("map2", "xqMap2");
return map;
}
(2):在login.jsp加入如下js函数
//dwr返回map类型
function checkUserMap() {
js_UserDWR.maps(function(rs){
var t = "";
for(var key in rs ) {
t = t + rs[key] + "---";
}
alert("map中的值为:" + t);
});
}
(3):把提交按钮的onclick事件换成checkUserMap()
2.6返回带泛型的List测试
(1):在UserDWR类中加入如下方法:
//返回带泛型的List测试
public List<User> getUserList() {
User user = new User();
user.setId(1);
user.setName("xiongqi");
User user2 = new User();
user2.setId(1);
user2.setName("xiongqi");
List<User> list = new ArrayList<User>();
list.add(user);
list.add(user2);
return list;
}
(2):在login.jsp加入如下js函数
//dwr返回list类型
function checkUserList() {
js_UserDWR.getUserList(function(rs){
var t = "";
for(var index in sr) {
t = t + rs[index].id + "---" + rs[index].name + "---"
}
alert("list中的值为:" + t);
});
}
(3):把提交按钮的onclick事件换成checkUserList()
2.7测试DWR的signatures
(1):在UserDWR类中加入如下方法:
//测试dwr的signatures,如果参数内部的泛型没有明确给出需要配置,如果给出为List<User>则无需配置
public List<User> getUserListSignatures(List list2) {
List<User> list = new ArrayList<User>();
list = list2;
return list;
}
(2):在login.jsp加入如下js函数
function checkUserSignatures() {
var userList = [{id:100,name:'xq'},{id:200,name:'xq2'}];
js_UserDWR.getUserListSignatures(userList,function(rs){
var t = "";
for(var index in rs) { //rs从0开始
t = t + rs[index].id + "---" + rs[index].name + "---"
}
alert("signatures配置后的结果为" + t);
});
}
(3):在dwr.xml中配置好signatures
(4):把提交按钮的onclick事件换成checkUserSignatures()
(5):说明如果函数换成如下形式,则无需添加Signatures,只有形参泛型类型不确定的时候才需添加
public List<User> getUserListSignatures(List<User> list2) {
List<User> list = new ArrayList<User>();
list = list2;
return list;
}
如果第三步没有配置signatures,则点击确定后结果如下: