`
cuisuqiang
  • 浏览: 3962645 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3672032
社区版块
存档分类
最新评论

DWR ajax 实际应用讲解

    博客分类:
  • JS
阅读更多

首先要增加相应的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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">    
    <title>THE FIRST DWR TEST FOR STR</title>
    <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>
    <script type="text/javascript">
    function callback(){
    	var name=document.getElementById('name').value;
    	str.helloWord(name,function back(value){
    		alert(value);
    	});
    }
    </script>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
  </head>  
  <body>
    <input type="text" id="name" />
    <input type="button" onclick="callback();" value="ClickMe" />
  </body>
</html>

 

在实际应用中,我们代码中可能传递回去的是List,Map,数组,Set,也可能是多维数组,也可能是对象。对于除对象之外的应用,请参考工程里面的代码。

代码中后台直接返回Java中的各种数据对象,主要看一下前台如何解析即可。

 

关于返回对象,我们首先定义一个对象实体。在后台中直接返回这个对象。重点是我们要在dwr配置中增加一个对象转换器,具体配置内容是

 

package org.dwr.re;

/**
 * 测试 实体对象
 * @author 崔素强
 */
public class Users {	
	private String name;	
	private String pass;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
}

  

然后在js中解析,其实js中也可以创建对象,按照解析js对象的方式解析返回的内容即可。

    <script type="text/javascript">
    function callback(){
    	//javascript中创建对象
    	//var users=new objFun($('name').value,$('pass').value);
    	var name=$('name').value;
    	var pass=$('pass').value;
    	//直接创建对象
    	var users={name:name,pass:pass};
    	obj.userLogin(users,function(data){
    		//解析javascript中的对象
    		$('name').value=data.name;
    		$('pass').value=data.pass;
    	});
    }
    //使用函数创建对象
    function objFun(name,pass){
    	//javascript中对象赋值
    	this.name=name;
    	this.pass=pass;
    }
    </script>

  

另外如果在页面中定义了两个方法,那么调用有先后顺序吗?meNoOrder.jsp,MeNoOrder.java演示调用两个方法的顺序,只要在页面调用时指定是否顺序调用即可。

 

    <script type="text/javascript">
    function noorderme(){
    	// 方法调用无顺序,该属性设置按照方法顺序执行
    	dwr.engine.setAsync=false;
    	noorder.method1(
    		function(data){
    			alert(data);
    		}
    	);
    	noorder.method2(
    		function(data){
    			alert(data);
    		}
    	);
    }
    </script>

通过弹出窗口的顺序,我们可以判断是否是有序的。

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

  • dwr.rar (1.6 MB)
  • 下载次数: 315
分享到:
评论
2 楼 cuisuqiang 2012-03-01  
z_gxjs 写道
[b][/b]

1 楼 z_gxjs 2012-03-01  
[b][/b]

相关推荐

    AJAX DWR教程

    "ajax+DWR+实战.pdf"则可能是更深入的实践教程,涵盖了多个实际应用场景。这些资源对于学习和理解DWR在实际项目中的运用非常有帮助。 **6. 总结** AJAX DWR教程旨在帮助开发者理解和掌握如何利用AJAX和DWR构建高...

    dwr ajax完整示例,内有dwr配置说明文档,eclicps工程

    学习这个示例,你将能掌握DWR的基本用法,并能将其应用到实际项目中,提升Web应用的用户体验。Eclipse工程可以帮助你在开发环境中直接运行和测试这些示例,加深理解和实践。通过阅读文档并亲手操作示例,你将对DWR有...

    dwr3.0搭建与讲解

    DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行交互,...在实际开发中,理解并掌握DWR的配置、使用以及与其他技术的融合,将对提升开发效率和应用质量大有裨益。

    Ajax讲解,dwr配置

    DWR(Direct Web Remoting)是一个开源Java框架,用于简化Ajax应用程序中JavaScript与Java之间的远程调用。通过DWR,开发者可以在客户端JavaScript代码中直接调用服务器端的Java方法,就像它们是本地函数一样。这极...

    基于DWR技术的AJAX应用开发介绍与实践

    内容概要:本文详细介绍了DWR (Direct Web Remote) 技术及其在AJAX开发中的应用。DWR允许前端使用JavaScript直接调用后台Java对象的方法。文章具体讲解了DWR的架构组成,包括JavaScript引擎、辅助函数库和动态生成的...

    ssh +ajax(dwr)整合讲解

    【SSH + AJAX (DWR) 整合讲解】 在现代Web开发中,SSH(Struts、Spring、Hibernate)和AJAX(Asynchronous JavaScript and XML)技术的整合是常见的实践,以构建高性能、高交互性的企业级应用。DWR(Direct Web ...

    Dwr+Ajax实例和教程

    7. **实例分析**:提供具体的应用场景,如实时数据显示、表单验证、数据检索等,帮助读者理解DWR和Ajax的实际应用。 8. **错误处理与调试**:分享在开发过程中可能出现的问题及解决策略,包括日志记录、错误回调...

    dwr中文实例讲解

    本实例讲解将重点围绕DWR在中文环境下的应用,结合AJAX技术,实现动态、异步的数据交换。 首先,我们需要了解DWR的基本结构。DWR包含三个主要部分:`Engine`、`Servlet`和`Client API`。`Engine`是核心组件,负责...

    dwr+ajax+jquery入门ppt

    **DWR(A Direct Web Remoting)、Ajax(Asynchronous JavaScript and XML)以及jQuery...通过学习这份PPT,开发者可以深入理解DWR、Ajax和jQuery的协同工作方式,从而在实际项目中高效地利用这些技术构建高性能的Web应用。

    Ajax&DWR帮助文档.rar

    5. 实战示例:提供一些实际应用示例,展示如何在项目中使用DWR构建Ajax功能。 6. 故障排查与最佳实践:提供解决常见问题的建议和优化DWR性能的方法。 “AJAX入门手册.chm”可能包含了Ajax的基础知识,包括: 1. ...

    dwr的简单应用程序

    **DWR(Direct Web Remoting)**是一种Java技术,它允许Web应用程序在客户端与服务器之间进行实时通信,而无需...阅读这个文档可以帮助读者深入理解DWR的工作原理和实际应用,从而更好地在自己的项目中实现前后端交互。

    ajax_DWR 中文文档

    **Ajax与DWR详解** Ajax(Asynchronous ...通过阅读这份DWR中文文档,开发者不仅可以掌握DWR的基本使用,还能深入理解其背后的技术原理,从而在实际项目中更高效地利用Ajax和DWR提升Web应用的交互性和响应性。

    SSH+Dwr+Ajax框架实现的OA办公自动化系统

    SSH+Dwr+Ajax框架是构建现代Web应用的一种高效组合,尤其在OA(Office Automation)办公自动化系统中,它们能够实现高效的数据交互和用户界面的动态更新。下面将详细讲解这三个关键技术及其在OA系统中的应用。 **...

    DWR的学习资料,DWR学习必备

    通过阅读这份笔记,你可以了解到DWR的基本概念、配置步骤以及实际应用技巧。 dwr.jar:这是DWR的核心库文件,包含了运行DWR所需的所有类和资源。在Java项目中,你需要将这个JAR文件添加到类路径,以便在服务器端...

    AJAX教程,DWR教程及实例

    3. **数据格式**:虽然名称中含有XML,但实际应用中,JSON更常被用来传递数据,因为它更轻量级且易于解析。 4. **跨域问题**:由于同源策略限制,AJAX请求通常只能发送到同源URL,除非服务器允许跨域请求。 5. **...

    DWR.rar_dwr

    通过上述文件,我们可以学习到DWR的核心概念、配置方法、实际应用案例以及如何与其他技术(如JSF和DOJO)集成。同时,这些资源也覆盖了从基础到进阶的多个层次,适合不同阶段的开发者学习和参考。

    ajax-DWR教程讲义.rar

    2. **"aybook.cn_dwjajy1215.ppt"**:这可能是一个PPT演示文稿,详细讲解了DWR框架的使用和Ajax技术的应用。通常,PPT会包含概念介绍、代码示例、实际案例分析等内容,帮助学习者理解并掌握相关知识。 3. **"E书...

    ajax电子资料和DWR中文文档

    这部分内容可能是与Ajax开发简略教程配套的示例代码,包括简单的Ajax请求、与服务器交互的例子,以及如何在实际项目中应用Ajax的实战代码。通过这些实例,开发者可以更好地理解和应用所学理论知识。 总结来说,这个...

Global site tag (gtag.js) - Google Analytics