DWR入门学习案例

之前整理东西都是搞到QQ空间去

感觉还是不方便,就开个博客方便记录

DWR貌似用的人很少了,网上资料也不多,记录一下,免得到时又忘了,例子来源于李刚的《疯狂Ajax讲义》

菜鸟一枚,感觉书讲得还可以

这个入门案例还是比较详细的(虽然也许没用),各种类型的参数以及返回类型(老老实实的getters、setters,声明泛型,可以省掉很多麻烦)


1、导包

<dependency>
	<groupId>org.directwebremoting</groupId>
	<artifactId>dwr</artifactId>
	<version>3.0.2-RELEASE</version>
</dependency>
<dependency>
	<groupId>commons-logging</groupId>
	<artifactId>commons-logging</artifactId>
	<version>1.1.1</version>
</dependency>

2、配置web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">


	<!-- 配置DWR的核心Servlet -->
	<servlet>
	    <!-- 指定DWR核心Servlet的名字 -->
		<servlet-name>dwr-invoker</servlet-name>
		<!-- 指定DWR核心Servlet的实现类 -->
		<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
		<!-- 指定DWR核心Servlet处于调试状态 -->
		<init-param>
			<param-name>debug</param-name>
			<param-value>true</param-value>
		</init-param>
	</servlet>
	<!-- 指定DWR核心Servlet的URL映射 -->
	<servlet-mapping>
		<servlet-name>dwr-invoker</servlet-name>
		<!-- 指定DWR核心Servlet映射的URL -->
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>
</web-app>

3、配置dwr.xml(放在WEB-INF下)

<?xml version="1.0" encoding="utf-8"?>
<!-- 指定DWR配置文件的DTD等信息 -->
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
    "http://getahead.org/dwr/dwr30.dtd">
<!-- DWR配置文件的根元素是dwr -->
<dwr>
  <!-- allow是核心元素,用来定义java对象和JavaScript对象的对应关系 -->
  <allow>
    <!-- 使用new创建一个JavaScript对象,该对象名为hello -->
    <create creator="new" javascript="hello">
      <!-- 创建hello对象使用的java类为day01.HelloDwr -->
      <param name="class" value="day01.HelloDwr"/>
    </create>
    <!-- 对Person类使用bean转换器 -->
    <convert converter="bean" match="day01.Person"/>
    <!-- 对没有setter和getter的Cat类使用object转换器  -->
    <convert converter="object" match="day01.Cat">
       <!-- 指定force="true"强制使用反射访问私有属性  -->
       <param name="force" value="true"/>
    </convert>
    <!-- 使用<convert converter="bean" match="day01.*"/> 表示包下所有类使用bean转换器-->
    <!-- 使用<convert converter="bean" match="*"/> 表示所有类使用bean转换器-->
    <!-- 使用exclude表明不会转换property1,property2两个属性,多属性使用逗号隔开
       <convert converter="object" match="day01.Cat">  
            <param name="exclude" value="property1,property2"/>
       </convert> -->
  </allow>
  <!-- 如何集合没有使用泛型来限制元素类型,则使用<signatures>来声明集合元素的数据类型-->
  <signatures>
     <![CDATA[
     import java.util.List;
     import day01.HelloDwr;
     import day01.Person;
     import day01.Cat;
     HelloDwr.sendListNoGeneric(String,List<Person>,List<Cat>);
     ]]>
  </signatures>
</dwr>

4、需要调用的类及调用方法的JSP

public class Cat {

	private String name;

	public String sex;

	public Cat() {
	}

	public Cat(String name) {
		this.name = name;
	}

	public Cat(String name, String sex) {
		this.name = name;
		this.sex = sex;
	}
}

public class Person {
	private String name;
	private String age;

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public Person() {

	}

	public Person(String name,String age) {

		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class HelloDwr {
	
    public String hello(String name,String age){
    	return name+",您好!您已开始DWR的学习之旅!您的年龄是:"+age+"岁。";
    }
    
    public String sendObject(Person p){
    	return p.getName()+",您好!您已学会了使用JavaBean参数,您的年龄是:"+p.getAge()+"岁。";
    }
    
    public Person getBean(String name,String age){
    	return new Person(name,age);
    }
    
    public Cat getObject(String name){
    	return new Cat("没有setter和getter的猫的名字:"+name);
    }
    
    public List<Person> getPersonList(){
    	List<Person> result = new ArrayList<Person>();
    	result.add(new Person("集合A","1"));
    	result.add(new Person("集合B","2"));
    	result.add(new Person("集合C","3"));
        return result;
    }
    
    public Person[] getPersonArray(){
    	Person[] result = new Person[3];
    	result[0]=new Person("数组A","4");
    	result[1]=new Person("数组B","5");
    	result[2]=new Person("数组C","6");
    	return result;
    }
    
    public Map<String,Person> getPersonMap(){
    	Map<String,Person> result = new HashMap<String,Person>();
    	result.put("MapFirst", new Person("MapA","7"));
    	result.put("MapSecond", new Person("MapB","8"));
    	result.put("MapThird", new Person("MapC","9"));
    	return result;
    }
    
    public String sendList(List<Person> p1){
    	String result = "";
    	for(Person p : p1){
    		result += "名字:"+p.getName()+" 年龄"+p.getAge()+"<br/>";
    		
    	}
    	result = "前端发送来的Bean集合:<br/>"+result;
    	return result;
    }
    
    public String sendListNoGeneric(String str,List p1,List c1){
    	String result = "";
    	for(Object p : p1){
    		result += "名字:"+((Person)p).getName()+" 年龄"+((Person)p).getAge()+"<br/>";
    	}
    	for(Object c : c1){
    		result += "猫性别:"+((Cat)c).sex+"<br/>";
    	}   	
    	result = str+result;
    	return result;
    }
    
    public String sendMap(Map<String,Person> pmap){
    	String result = "";
    	for(String key : pmap.keySet()){
    		result += "键为:"+key+" 值为"+pmap.get(key).getName()+"+"+pmap.get(key).getAge()+"<br/>";
    	}
    	return result;
    }
}

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Dwr入门</title>
<script type='text/javascript' src='/day01/dwr/engine.js'></script>
<script type='text/javascript' src='/day01/dwr/util.js'></script>
<script type='text/javascript' src='/day01/dwr/interface/hello.js'></script>
<script>
	var name;
	var age;
	var getNameAndAge = function() {
		name = document.getElementById('name').value;
		age = document.getElementById('age').value;
	}
	var showData = function(data){
		document.getElementById('show').innerHTML = data;
	}
	
	var cb = function(data) {
		showData(data);
	}
	
	var beanCb = function(data) {
		var str = "JavaBean的名字:"+ data.name + ",JavaBean的年龄:" + data.age;
		showData(str);
	}
	
	
	var objCb = function(data) {
		showData(data.name);
	}
	
	
	var listOrArrayCb = function(data) {
		var result = "";
		for (var i = 0; i < data.length; i++) {
			result += "名字:"+data[i].name+" 年龄:"+data[i].age+"<br>";
		}
		showData(result);
	}
	
	
	var mapCb = function(data) {
		var result = "";
		for (var key in data) {
			result += "键为:"+key+" 值为:"+data[key].name+"+"+data[key].age+"<br>";
		}
		showData(result);
	}
	
	
	var sendListCb = function(data){
		showData(data);
	}
	
	
	var sendMapCb = function(data){
		showData(data);
	}
	
	
	var sendMessage = function() {
		getNameAndAge();
		hello.hello(name, age, cb);
	}
	
	
	var sendObject = function() {
		getNameAndAge();
		hello.sendObject({name : name,age : age}, cb);
	}
	
	
	var getBean = function() {
		getNameAndAge();
		hello.getBean(name, age, beanCb);
	}
	
	
	var getObject = function() {
		getNameAndAge();
		hello.getObject(name, objCb);
	}
	
	
	var getBeanList = function() {
		hello.getPersonList(listOrArrayCb);
	}
	
	
	var getBeanArray = function() {
		hello.getPersonArray(listOrArrayCb);
	}
	
	
	var getBeanMap = function() {
		hello.getPersonMap(mapCb);
	}
	
	
	var sendBeanList = function() {
		//创建JavaScript数组
		var args = [{name:"客户端beanA",age:"x"},{name:"客户端beanB",age:"y"},{name:"客户端beanC",age:"z"}];
		hello.sendList(args,sendListCb);
	}
	
	
	var sendListNoGeneric = function() {
		//创建JavaScript数组
		var str = "前端发送来的无泛型集合:<br/>";
		var args = [{name:"客户端无泛型A",age:"x"},{name:"客户端无泛型B",age:"y"},{name:"客户端无泛型C",age:"z"}];
		var args1 = [{name:"客户端无泛型A",sex:"公"},{name:"客户端无泛型A",sex:"母"},{name:"客户端无泛型A",sex:"看不出来"}];
		hello.sendListNoGeneric(str,args,args1,sendListCb);
	}
	
	
	var sendMap = function() {
		//创建JavaScript对象
		var args = {mapFirst:{name:"客户端mapA",age:"x"},mapSecond:{name:"客户端mapB",age:"y"},mapThird:{name:"客户端mapC",age:"z"}};
		hello.sendMap(args,sendMapCb);
	}
</script>
<body>
	<h2>Dwr入门</h2>
	请输入您的名字:
	<input id="name" name="name" type="text" />
	<br /> 请输入您的年龄:
	<input id="age" name="age" type="text" />
	<br />
	<button onclick="sendMessage();">发送简单请求</button>
	<br />
	<button onclick="sendObject();">发送对象参数</button>
	<br />
	<button onclick="getBean();">返回JavaBean</button>
	<br />
	<button onclick="getObject();">返回Object</button>
	<br />
	<button onclick="getBeanList();">返回Bean集合</button>
	<br />
	<button onclick="getBeanArray();">返回Bean数组</button>
	<br />
	<button onclick="getBeanMap();">返回Bean的Map集合</button>
	<br />
	<button onclick="sendBeanList();">发送JavaBean集合</button>
	<br />
	<button onclick="sendListNoGeneric();">发送无泛型集合</button>
	<br />
	<button onclick="sendMap();">发送Map集合</button>
	<br />
	<br /> 下面是服务器的回应:
	<br />
	<div id="show"></div>
</body>
</html>

最后再贴一张转换关系图


猜你喜欢

转载自blog.csdn.net/weixin_39112840/article/details/78322965
dwr
今日推荐