dwr怎么返回对象
- 格式:doc
- 大小:97.50 KB
- 文档页数:17
DWR调用方式1. 什么是DWRDWR(Direct Web Remoting)是一个开源的Java框架,用于简化在Web应用程序中使用Ajax技术。
它提供了一种简单的方式来将Java代码暴露给JavaScript,并使得在客户端和服务器之间进行远程通信变得更加容易。
DWR允许开发人员通过直接调用服务端的Java方法来处理客户端的请求,而无需编写大量的JavaScript代码来处理网络通信。
这使得开发人员可以更专注于业务逻辑,而无需过多关注底层的网络细节。
2. DWR调用方式DWR提供了多种方式来进行远程调用,包括:2.1. 代理方式(Proxy)代理方式是最常见和推荐的一种DWR调用方式。
通过代理对象,我们可以直接调用服务端的Java方法,并将结果返回给客户端。
在客户端,我们需要首先创建一个代理对象,该对象负责与服务端进行通信。
我们可以使用dwr.engine命名空间下的Proxy对象来创建代理对象,并指定要调用的Java类和方法。
var proxy = new dwr.engine.Proxy();proxy.setRemoteClass(MyService);proxy.setRemoteMethod('myMethod');在上述代码中,MyService是服务端中定义的Java类,myMethod是该类中的一个方法。
然后,我们可以使用代理对象来调用服务端的方法,并处理返回的结果。
proxy.myMethod(param1, param2, {callback: function(result) {// 处理返回结果},errorHandler: function(message) {// 处理错误信息}});在上述代码中,param1和param2是传递给服务端方法的参数。
callback函数用于处理返回结果,而errorHandler函数则用于处理错误信息。
2.2. 反向Ajax方式(Reverse Ajax)反向Ajax方式是一种特殊的DWR调用方式,它允许服务端主动推送数据给客户端。
DWR的作用:DWR是一个可以允许你去创建AJAX WEB站点的JAVA开源库。
它可以让你在浏览器中的Javascript代码调用Web服务器上的Java代码,就像在Java 代码就在浏览器中一样。
在使用dwr前,先介绍下我们远程调用的方法,以方便下文解说其中的KnowDAO类是实现了CRUD方法的dao类,返回一个字符串,内容是当前时间和数据库中的数据数量。
注:别忘了写getter,setter方法。
DWR的配置:web.xml:首先要在你的web.xml中加入dwr的配置代码,代码如下:.其中<init-param>中配置了debug的值,表示可以进入调试模式,其他都是必须有的dwr.xml:要建立一个dwr.xml的配置文件,这个文件放在你的项目的根目录下。
和你的web.xml放在一起。
在demo中我的代码如下:其中<dwr>中的部分就是dwr的配置,<dwr>中<allow>标签中定义了DWR能够创建和转换的类.<create>中的create属性有很多类型,这里使用的是spring表示整合spring。
javascript属性的值是DwrTime是在js的页面中使用的,类似于beans.xml中,bean id的作用不同的是bean id的值作为一个对象的实例,可以直接使用在java中,而javascript属性是直接使用在js中。
<param>标签中的值表示的是与beans.xml注入的哪个实例相对应,name属性是固定的表示这个属性是与bean id相关,value属性和bean id的值是相同的.beans.xml中的注入文件如下:<include>标签表示的是类中那些方法可以在js中使用,如果不想让某些方法在js被调用,那么就不要include它,注意method属性的值可以是”*”,用来表示所有方法. PS:除了include标签以外,还可以用exclude 标签来声明, exclude表示的是不能使用的方法,凡是没声明的就可以使用, exclude不推荐使用。
Dwr 框架基础用法1. Web.xml 中的配置:<servlet> <description>Direct Web Remoter Servlet</description> <display-name>DWR Servlet</display-name> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> <load-on-startup>10</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>2. Dwr.xml 中的配置:<dwr> <allow> <createcreator="new"javascript="JDate"> <paramname="class"value="java.util.Date" /> </create> <createcreator="new"javascript="DwrInvokeData"> <paramname="class"value="com.xxx.xxx.DWRACTION" /></create> </allow> </dwr>3. JSP 中需要引入:<scripttype='text/javascript' src='/项目名 /dwr/interface/DwrInvokeData.js'></script> <scripttype='text/javascript' src='/项目名/dwr/engine.js'></script> <scripttype='text/javascript' src='/项目名/dwr/util.js'></script>4. Java 代码还需要一个 java 类 Action 中些处理方法publicObjectTest(argType1arg1,argType2arg2,………,argTypeNargN)throws Exception{ //处理逻辑 Return Object; }5. Javascript 调用function test(){ //其他代码 DwrInvokeData.方法名(参数 1,参数 2,..,参数,testCallBack); //如:DwrInvokeData.Test(参数 1,参数 2,..,参数,testCallBack); //其他代码} //回调函数中返回参数为后台处理 Action 中的返回值,可以是任意 JavaBean,基本类型,数//组,集 合等 functiontestCallBack(返回参数){ //处理界面展代码 }。
dwrinvokedataaction 方法详解摘要:1.DWR简介2.dwrinvokedataaction方法概述3.参数详解4.示例代码与应用5.总结与建议正文:一、DWR简介DWR(Direct Web Remoting)是一个基于Java的远程方法调用框架,它允许在不同的Java应用程序之间直接调用方法,而无需共享任何中间对象。
DWR的核心思想是让Java对象直接在客户端运行,从而实现客户端与服务器端的无缝通信。
在本篇文章中,我们将重点介绍dwrinvokedataaction方法,它是DWR中非常重要的一个方法。
二、dwrinvokedataaction方法概述dwrinvokedataaction方法是用于在客户端调用服务器端方法的。
它接收一个Method对象作为参数,该对象包含了服务器端方法的所有信息。
在调用此方法时,DWR会自动将服务器端方法的参数转换为JSON格式,并通过Ajax请求发送到服务器。
同时,DWR还支持返回值的处理,可以将服务器端方法的返回值转换为JSON格式并返回给客户端。
三、参数详解1.Method对象:包含了服务器端方法的所有信息,如方法名、参数类型及参数值等。
2.参数值:可以是任意类型的对象,如基本数据类型、Java对象等。
需要注意的是,如果参数值为Java对象,则需要实现Serializable接口,以便在客户端和服务器之间传输。
3.异常处理:可以通过Throwable对象或Exception对象指定异常处理方式。
如果不需要处理异常,可以设置为null。
4.回调函数:可以设置一个回调函数,当服务器端方法调用成功或失败时,该回调函数会被调用。
回调函数接收一个Object参数,可以返回任何类型的值。
四、示例代码与应用以下是一个简单的示例代码,演示了如何使用dwrinvokedataaction方法调用服务器端方法:```java// 服务器端方法public class Server {public String sayHello(String name) {return "Hello, " + name;}}// 客户端代码public class Client {public static void main(String[] args) {// 创建服务器端对象Server server = new Server();// 调用服务器端方法String result = (String) DWR.invokeDataAction(server, "sayHello", "World");System.out.println(result);}}```在这个示例中,我们创建了一个简单的服务器端方法sayHello,并在客户端使用dwrinvokedataaction方法调用它。
DWR技术总结目录1DWR入门 (3)1.1DWR(Direct Web Remoting)概述 (3)1.2DWR使用入门 (3)2web.xml的配置 (7)3dwr.xml的配置 (8)3.1创建dwr.xml文件 (8)3.2<init>标签 (8)3.3<allow>标签 (8)3.3.1Creators构造器 (9)3.3.2Converters转换器 (10)3.3.3Filters过滤器 (11)3.4<signatures>标签 (12)4engine.js功能 (12)5util.js功能 (13)6DWR中的javascript (13)6.1DWR的远程调用——使用回调函数处理Ajax的异步特性 (13)6.2创建一个与Java对象相匹配的JavaScript对象 (14)1DWR入门1.1DWR(Direct Web Remoting)概述DWR是一种AJAX(Asynchronous JavaScript and XML)的JAVA实现,是一个能够使运行在服务器上java和运行在浏览器中的JavaScript交互,并能简单的相互调用的Java库。
官方网站:最新版本:3.0.rc2稳定版本:2.0.7DWR包括两个主要部分:*运行在服务器上的Java Servlet,用以处理请求和向浏览器发回响应。
*运行在浏览器上的JavaScript,用以发送请求,并可以动态的更新网页。
DWR的工作原理是动态生成基于Java类的JavaScript。
生成的代码具有ajax 功能,使效果看起来就好像在浏览器上执行的一样,实际上是,代码调用发生在服务器端,DWR负责数据的传递和转换。
这种从java到javascript的运程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR 的优点在于不需要任何的网页浏览器插件就能够运行在网页上。
1.1跟我学DWR框架——如何应用DWR框架中的回调机制及应用示例1.1.1DWR框架中的回调机制及相关的应用示例1、DWR框架中的回调机制(1)在DWR框架中是如何实现AJAX技术中的“异步”功能由于DWR框架是根据dwr.xml生成和Java代码类似的JavaScript代码,因此在DWR 框架中通过引入回调函数来实现Ajax的异步调用特性——当执行的结果被返回时,DWR 框架会调用这个回调函数。
(2)回调函数定义的要求通常我们都需要传递外部信息给一个回调函数,因此所有的回调函数都应该只有一个参数——参数就是从远程方法返回的值,从而实现将服务器端的组件的方法的返回值给回调函数。
如下为代码示例:function callbackFunc(dataFromServer){// do something with dataFromServer and dataFromBrowser …}2、DWR框架中的回调机制的某个示例<%@ page contentType="text/html; charset=GBK" %><html><head><title> 体现DWR框架中的回调机制的Demo示例</title><script type='text/javascript'src='/DWRWebTest/dwr/interface/JDate.js'></script><script type='text/javascript' src='/DWRWebTest/dwr/engine.js'></script><script type='text/javascript' src='/DWRWebTest/dwr/util.js'></script><script language="javascript">function showTime(){JDate.toString(callBackFun);}callBackFun = function(toStringReturnTimeString){alert("当前的时间是:"+toStringReturnTimeString);}</script></head><body bgcolor="#ffffff"><a href="#" onclick="javascript:showTime()">点击我可以获得当前的时间</a></body></html>3、DWR框架中的回调机制与RMI 或者 SOAP等其它的实现机制的不同这种从远程的 Java 方法到 JavaScript 程序的方式给 DWR框架使用者一个感觉,好像传统的 RPC 方式,比如 RMI 或者 SOAP,事实上与之相比 DWR 的优势在于它不需要任何浏览器插件或者某种客户端的代理程序。
dwr使用教程DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX 开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本 DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-logging日记操作.以上摘自open-open,它通过反射,将java翻译成javascript,然后利用回调机制,轻松实现了javascript调用Java代码。
其大概开发过程如下:1.编写业务代码,该代码是和dwr无关的。
2.确认业务代码中哪些类、哪些方法是要由javascript直接访问的。
3.编写dwr组件,对步骤2的方法进行封装。
4.配置dwr组件到dwr.xml文件中,如果有必要,配置convert,进行java和javascript类型互转。
5.通过反射机制,dwr将步骤4的类转换成javascript代码,提供给前台页面调用。
5.编写网页,调用步骤5的javascript中的相关方法(间接调用服务器端的相关类的方法),执行业务逻辑,将执行结果利用回调函数返回。
6.在回调函数中,得到执行结果后,可以继续编写业务逻辑的相关javascript 代码。
下面以用户注册的例子,来说明其使用。
(注意,本次例子只是用于演示,说明DWR的使用,类设计并不是最优的)。
1.先介绍下相关的Java类User: 用户类,public class User {//登陆ID,主键唯一private String id;//姓名private String name;//口令private String password;//电子邮件private String email;//以下包含getXXX和setXXX方法.......}UserDAO:实现User的数据库访问,这里作为一个演示,编写测试代码public class UserDAO {//存放保存的数据private static Map dataMap = new HashMap();//持久用户public boolean save(User user) {if (dataMap.containsKey(user.getId()))return false;System.out.println("下面开始保存用户");System.out.println("id:"+user.getId());System.out.println("password:"+user.getPassword());System.out.println("name:"+user.getName());System.out.println("email:"+user.getEmail());dataMap.put(user.getId(), user);System.out.println("用户保存结束");return true;}//查找用户public User find(String id) {return (User)dataMap.get(id);}}DWRUserAccess:DWR组件,提供给javascript访问的。
一、dwr简介DWR(Direct Web Remoting)是一种AJAX解决方案。
DWR包括一个java库,以及一套javascript,使得我们可以用一种非常简单的方式,在页面上使用javascript直接调用后台的java对象。
DWR 是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单。
利用DWR可以在客户端利用JavaScript直接调用服务端的Java 方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR 根据Java类来动态生成JavaScrip代码)。
Dwr在运行的时候,动态生成一个javascript库,这个库是对后台javabean调用的封装,我们可以直接使用这个库来实现直接调用JavaBean的目的。
二、dwr开发步骤开发步骤如下:1、为项目添加dwr框架(jar包)下载dwr.jar文件,并将其拷贝到项目的WebRoot/lib目录下;2、在web.xml中添加dwr控制器3、创建dwr.xml4、在dao层设置访问方法5、修改adminAddCate.jsp6、测试三、dwr实例1、创建一个Web项目2、导入dwr.jar包3、修改web.xml4、编辑业务代码5、创建并编辑dwr.xml代码如下:------------nameForm.java--------------public class nameForm{private String name;public String getName() {return name;}public void setName(String name) { = name;}}------------nameService.java--------------public class nameService{public int isExist(String name){int status;nameForm dealer = new nameForm();dealer.setName("泰山");if(name.equals(dealer.getName()))status = 1;elsestatus = 0;return status;}}----------------index.jsp------------------<%@page contentType="text/html; charset=gb2312"%><html><head><title></title><script type="text/javascript" src="/dwr/dwr/interface/test.js"></script><script type="text/javascript"src="/dwr/dwr/engine.js"></script> <script type="text/javascript"src="/dwr/dwr/util.js"></script><script type="text/javascript">function save(flag){var termName = document.all.input.value;test.isExist(termName,reply);function reply(data){if(data==1){alert("该名称已存在!");return false;}else{alert("该名称不存在!");}}}</script></head><body><center>请输入一座山名:<br><input type="text"name="input"id="input"/><br><input type="button"onClick="save('0')"value="检测"/></center></body></html>----------------web.xml------------------<?xml version="1.0"encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!--配置dwr --><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><init-param><param-name>scriptCompressed</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping></web-app>----------------dwr.xml------------------<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE dwr PUBLIC"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN""/dwr/dwr10.dtd"><dwr><allow><create creator="new"javascript="test"><param name="class"value="nameService"/><include method="isExist"/></create></allow></dwr>。
Dwr入门操作手册DWR配置和使用设置DWR的使用是简单的:将DWR的jar文件拷入Web应用的WEB-INF/lib目录中,在web.xml中增加一个servlet声明,并创建DWR的配置文件。
DWR的分发中需要使用一个单独的jar文件。
你必须将DWR servlet加到应用的WEB-INF/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>一个可选的步骤是设置DWR为调试模式—象上面的例子那样—在servlet描述段中将debug参数设为true。
当DWR在调试模式时,你可以从HTMl网页中看到所有的可访问的Java对象。
包含了可用对象列表的网页会出现在/WEBAPP/dwr这个url上,它显示了对象的公共方法。
所列方法可以从页面中调用,允许你,第一次,运行服务器上的对象的方法。
下图显示了调试页的样子:调试页现在你必须让DWR知道通过XMLHttpRequest对象,什么对象将会接收请求。
使用dwr的一点经验1.需要jdom.jar和bsf.jar,否则无法跟spring整合.2.dwr生成的javascript函数会自动加一个回调函数的参数,如原来的函数是checkExist(String name),那么生成的javascript函数是checkExist(callbackFunc,String name).3.注意回调函数只能有一个参数,就是服务器的返回值,如function(messFromServer),这里messFromServer是该操作在服务器上的返回值.4.util.js里面有很多有用的方法,最好熟悉一下.5.convert并不是必须的,只有你的函数需要传递非基本数据类型的数据时需要此项.DWR中的util.js先简单介绍一下什么是DWRDWR - Direct Web Remotingajax是一种提高web站点吸引力和实用性的书写web页面的方法。
它从服务器端更新web 页面的特殊区域,从而增强用户的交互性。
它允许信息在短时间的延迟或不用刷新页面的情况下更新。
DWR减少了开发时间,也减少了一些可能的错误,这些错误是在提供常用的方法函数并消除一些与高交互性web站点有关的重复性代码的时候产生的。
DWR是作为开源软件(ASL verssion 2.0)而可以免费得到的。
它凭借它的广阔的库、例子和指南非常易于实现。
把它结合到一个现有的站点是非常简单的,同样它也可以简单地与大多数java框架结合。
util.js util.js包含了一些使用的方法,从而帮助你利用j avascript(可能)从服务器端更新你的web数据。
你可以在DWR之外的地方使用它,因为它并不依赖与DWR而实现。
它包含四个页面处理函数:getValue[s]()、setValue[s]()作用于除tables、lists和images以外的大多数html元素。
getText()作用于select lists。
查看文章DWR如何获得返回对象 list Map Set list.add(JavaBean) 2009-05-11 14:231、调用没有返回值和参数的JAVA方法1.1、dwr.xml的配置<dwr><allow><create creator="new" javascript="testClass" ><param name="class" value="/com.dwr.TestClass" /><include method="testMethod1"/></create></allow></dwr><allow>标签中包括可以暴露给javascript访问的东西。
<create>标签中指定javascript中可以访问的java类,并定义DWR应当如何获得要进行远程的类的实例。
creator="new"属性指定java类实例的生成方式,new 意味着DWR应当调用类的默认构造函数来获得实例,其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。
javascript=" testClass "属性指定javascript代码访问对象时使用的名称。
<param>标签指定要公开给javascript的java类名。
<include>标签指定要公开给javascript的方法。
不指定的话就公开所有方法。
<exclude>标签指定要防止被访问的方法。
1.2、javascript中调用首先,引入javascript脚本<script src='dwr/interface/ testClass.js'></script><script src="/dwr/engine.js"></script><script src="/dwr/util.js"></script>其中TestClass.js是dwr根据配置文件自动生成的,engine.js和util.js是dwr自带的脚本文件。
其次,编写调用java方法的javascript函数Function callTestMethod1(){testClass.testMethod1();}2、调用有简单返回值的java方法2.1、dwr.xml的配置配置同1.1<dwr><allow><create creator="new" javascript="testClass" ><param name="class" value="/com.dwr.TestClass" /><include method="testMethod2"/></create></allow></dwr>2.2、javascript中调用首先,引入javascript脚本其次,编写调用java方法的javascript函数和接收返回值的回调函数Function callTestMethod2(){testClass.testMethod2(callBackFortestMethod2);}Function callBackFortestMethod2(data){//其中date接收方法的返回值//可以在这里对返回值进行处理和显示等等alert("the return value is " + data);}其中callBackFortestMethod2是接收返回值的回调函数3、调用有简单参数的java方法3.1、dwr.xml的配置配置同1.1<dwr><allow><create creator="new" javascript="testClass" ><param name="class" value="/com.dwr.TestClass" /><include method="testMethod3"/></create></allow></dwr>3.2、javascript中调用首先,引入javascript脚本其次,编写调用java方法的javascript函数Function callTestMethod3(){//定义要传到java方法中的参数var data;//构造参数data = “test String”;testClass.testMethod3(data);}4、调用返回JavaBean的java方法4.1、dwr.xml的配置<dwr><allow><create creator="new" javascript="testClass" ><param name="class" value="/com.dwr.TestClass" /><include method="testMethod4"/></create><convert converter="bean" match=""com.dwr.TestBean"><param name="include" value="username,password" /></convert></allow></dwr><creator>标签负责公开用于Web远程的类和类的方法,<convertor>标签则负责这些方法的参数和返回类型。
convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据类型。
DWR自动地在Java和JavaScript表示之间调整简单数据类型。
这些类型包括Java原生类型和它们各自的封装类表示,还有String、Date、数组和集合类型。
DWR也能把JavaBean 转换成JavaScript 表示,但是出于安全性的原因,要求显式的配置,<convertor>标签就是完成此功能的。
converter="bean"属性指定转换的方式采用JavaBean命名规范,match=""com.dwr.TestBean"属性指定要转换的javabean 名称,<param>标签指定要转换的JavaBean属性。
4.2、javascript中调用首先,引入javascript脚本其次,编写调用java方法的javascript函数和接收返回值的回调函数Function callTestMethod4(){testClass.testMethod4(callBackFortestMethod4);}Function callBackFortestMethod4(data){//其中date接收方法的返回值//对于JavaBean返回值,有两种方式处理//不知道属性名称时,使用如下方法for(var property in data){alert("property:"+property);alert(property+":"+data[property]);}//知道属性名称时,使用如下方法alert(ername);alert(data.password);}其中callBackFortestMethod4是接收返回值的回调函数5、调用有JavaBean参数的java方法5.1、dwr.xml的配置配置同4.1<dwr><allow><create creator="new" javascript="testClass" ><param name="class" value="/com.dwr.TestClass" /><include method="testMethod5"/></create><convert converter="bean" match="com.dwr.TestBean"><param name="include" value="username,password" /></convert></allow></dwr>5.2、javascript中调用首先,引入javascript脚本其次,编写调用java方法的javascript函数Function callTestMethod5(){//定义要传到java方法中的参数var data;//构造参数,date实际上是一个objectdata = { username:"user", password:"password" }testClass.testMethod5(data);}6、调用返回List、Set或者Map的java方法6.1、dwr.xml的配置配置同4.1<dwr><allow><create creator="new" javascript="testClass" ><param name="class" value="/com.dwr.TestClass" /><include method="testMethod6"/></create><convert converter="bean" match="com.dwr.TestBean"><param name="include" value="username,password" /></convert></allow></dwr>注意:如果List、Set或者Map中的元素均为简单类型(包括其封装类)或String、Date、数组和集合类型,则不需要<convert>标签。