首先要增加相应的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
相关推荐
"ajax+DWR+实战.pdf"则可能是更深入的实践教程,涵盖了多个实际应用场景。这些资源对于学习和理解DWR在实际项目中的运用非常有帮助。 **6. 总结** AJAX DWR教程旨在帮助开发者理解和掌握如何利用AJAX和DWR构建高...
学习这个示例,你将能掌握DWR的基本用法,并能将其应用到实际项目中,提升Web应用的用户体验。Eclipse工程可以帮助你在开发环境中直接运行和测试这些示例,加深理解和实践。通过阅读文档并亲手操作示例,你将对DWR有...
DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行交互,...在实际开发中,理解并掌握DWR的配置、使用以及与其他技术的融合,将对提升开发效率和应用质量大有裨益。
DWR(Direct Web Remoting)是一个开源Java框架,用于简化Ajax应用程序中JavaScript与Java之间的远程调用。通过DWR,开发者可以在客户端JavaScript代码中直接调用服务器端的Java方法,就像它们是本地函数一样。这极...
【SSH + AJAX (DWR) 整合讲解】 在现代Web开发中,SSH(Struts、Spring、Hibernate)和AJAX(Asynchronous JavaScript and XML)技术的整合是常见的实践,以构建高性能、高交互性的企业级应用。DWR(Direct Web ...
7. **实例分析**:提供具体的应用场景,如实时数据显示、表单验证、数据检索等,帮助读者理解DWR和Ajax的实际应用。 8. **错误处理与调试**:分享在开发过程中可能出现的问题及解决策略,包括日志记录、错误回调...
本实例讲解将重点围绕DWR在中文环境下的应用,结合AJAX技术,实现动态、异步的数据交换。 首先,我们需要了解DWR的基本结构。DWR包含三个主要部分:`Engine`、`Servlet`和`Client API`。`Engine`是核心组件,负责...
**DWR(A Direct Web Remoting)、Ajax(Asynchronous JavaScript and XML)以及jQuery...通过学习这份PPT,开发者可以深入理解DWR、Ajax和jQuery的协同工作方式,从而在实际项目中高效地利用这些技术构建高性能的Web应用。
5. 实战示例:提供一些实际应用示例,展示如何在项目中使用DWR构建Ajax功能。 6. 故障排查与最佳实践:提供解决常见问题的建议和优化DWR性能的方法。 “AJAX入门手册.chm”可能包含了Ajax的基础知识,包括: 1. ...
**DWR(Direct Web Remoting)**是一种Java技术,它允许Web应用程序在客户端与服务器之间进行实时通信,而无需...阅读这个文档可以帮助读者深入理解DWR的工作原理和实际应用,从而更好地在自己的项目中实现前后端交互。
以用户注册为例,分析 DWR 在实际应用中的具体操作步骤。 1. **定义 User 类**:表示用户的属性,如 id、name、password 和 email。 ```java public class User { private String id; // 登陆ID,主键唯一 ...
**Ajax与DWR详解** Ajax(Asynchronous ...通过阅读这份DWR中文文档,开发者不仅可以掌握DWR的基本使用,还能深入理解其背后的技术原理,从而在实际项目中更高效地利用Ajax和DWR提升Web应用的交互性和响应性。
SSH+Dwr+Ajax框架是构建现代Web应用的一种高效组合,尤其在OA(Office Automation)办公自动化系统中,它们能够实现高效的数据交互和用户界面的动态更新。下面将详细讲解这三个关键技术及其在OA系统中的应用。 **...
3. **DWR的API介绍**:讲解DWR的主要接口,如`Util`、`Call`、`Engine`等,以及它们在实际应用中的用法。 4. **安全配置**:讲解如何通过配置白名单和过滤器来确保DWR的安全性。 5. **DWR的高级特性和实践**:包括...
通过阅读这份笔记,你可以了解到DWR的基本概念、配置步骤以及实际应用技巧。 dwr.jar:这是DWR的核心库文件,包含了运行DWR所需的所有类和资源。在Java项目中,你需要将这个JAR文件添加到类路径,以便在服务器端...
3. **数据格式**:虽然名称中含有XML,但实际应用中,JSON更常被用来传递数据,因为它更轻量级且易于解析。 4. **跨域问题**:由于同源策略限制,AJAX请求通常只能发送到同源URL,除非服务器允许跨域请求。 5. **...
通过上述文件,我们可以学习到DWR的核心概念、配置方法、实际应用案例以及如何与其他技术(如JSF和DOJO)集成。同时,这些资源也覆盖了从基础到进阶的多个层次,适合不同阶段的开发者学习和参考。
2. **"aybook.cn_dwjajy1215.ppt"**:这可能是一个PPT演示文稿,详细讲解了DWR框架的使用和Ajax技术的应用。通常,PPT会包含概念介绍、代码示例、实际案例分析等内容,帮助学习者理解并掌握相关知识。 3. **"E书...
这部分内容可能是与Ajax开发简略教程配套的示例代码,包括简单的Ajax请求、与服务器交互的例子,以及如何在实际项目中应用Ajax的实战代码。通过这些实例,开发者可以更好地理解和应用所学理论知识。 总结来说,这个...