日期:2014-05-16  浏览次数:20597 次

DWR ajax 实际应用讲解

首先要增加相应的JAR包,这里我们需要的包并不多。

dwr.jar,commons-logging-1.0.4.jar,log4j-1.2.12.jar。注意我这里使用的版本是dwr-2.0.5。

?

其实要在web.xml中配置dwr。dwr控制器会拦截请求完成相应的处理。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>


	<servlet>
		<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-app>

?

增加dwr配置文件dwr.xml,定义那些类来提供方法,已经在页面调用时会用到的名字。我这里的配置文件是包含了所有示例配置的文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" 
			"http://getahead.org/dwr/dwr20.dtd">

<dwr>

	<allow>
		<!--  -->
		<create creator="new" javascript="noorder">
			<param name="class" value="org.dwr.me.MeNoOrder" />
		</create>

		<!-- HAVER RETURN -->
		<create creator="new" javascript="str">
			<param name="class" value="org.dwr.re.BackStr" />
		</create>
		<create creator="new" javascript="arr">
			<param name="class" value="org.dwr.re.BackArray" />
		</create>
		<create creator="new" javascript="douarr">
			<param name="class" value="org.dwr.re.BackDoubleArray" />
		</create>
		<create creator="new" javascript="list">
			<param name="class" value="org.dwr.re.BackList" />
		</create>
		<create creator="new" javascript="set">
			<param name="class" value="org.dwr.re.BackSet" />
		</create>
		<create creator="new" javascript="map">
			<param name="class" value="org.dwr.re.BackMap" />
		</create>
		
		<create creator="new" javascript="obj">
			<param name="class" value="org.dwr.re.BackObj" />
		</create>
		<!-- 对象转换器 -->
		<convert match="org.dwr.re.Users" converter="bean">
			<param name="include" value="name,pass"></param>
		</convert>


	</allow>

</dwr>

?

下面是一个简单示例,传递参数接收返回值。以下是需要的类代码

package org.dwr.re;

/**
 * 测试 接收参数返回字符串
 * @author 崔素强
 */
public class BackStr {	
	public String helloWord(String name){
		return "Hello " + name + "!";
	}
}

?

然后在dwr配置文件中定义这个类和名字,str将是将来在前台用到的名字。creator是new,我们也可以结合spring使用,这里就不再介绍。

		<create creator="new" javascript="str">
			<param name="class" value="org.dwr.re.BackStr" />
		</create>

?

测试这个请求是否可用,访问 http://localhost:8800/dwr/dwr/index.html?里面包含所有可以使用的请求。点击一个进去,点击str,helloWord是可以用的方法,输入参数点击调用。

我们也可以在这个地方同时点击其他返回了java数据对象的测试,可以弹出返回的内容。

?

在jsp中应用展现效果

页面调用时要引用几个js文件,分别是

    <script type='text/javascript' src='/dwr/dwr/util.js'></script>
    <script type='text/javascript' src='/dwr/dwr/interface/str.js'></script>
    <script type='text/javascript' src='/dwr/dwr/engine.js'></script>

?str.js就是在配置文件中定义的名字。

看效果

<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUB