DWR入门

合集下载

DWR框架

DWR框架

DWR创建器
Java对象必须被暴露成客户端的JavaScript对象才可以被调用,为了将Java对象暴露成JavaScript对 象,DWR提供了创建器,负责完成Java对象到JavaScript对象的创建转换 常用的创建器有: new创建器:该创建器使用new关键字创建Java实例,并将其转换为JavaScript对象 spring创建器:直接使用Spring容器中的Bean,用于DWR和Spring的整合 <allow> <create creator="" javascript="" scope=""> <param name="" value=""/> <exclude method=""/> <include method=""/> </create> </allow> creator属性:指定使用的创建器名称,例如:new,spring等 javascript属性:当远程Java对象被创建后,DWR负责将该对象暴露成JavaScript客户端的JavaScript对象, 该属性指定这个JavaScript对象名 scope属性:指定Java实例的生命范围,可以选择application,session,request和page,默认为page param元素:用来指定creator的其他相关参数,不同的创建器需要指定的param是不一样的 include元素:以白名单方式指定可以暴露给客户端的方法 exclude元素:以黑名单方式指定哪些方法不暴露给客户端
DWR的使用
客户端要调用服务器端的Java方法,必须首先导入DWR生成好的JavaScript文件 实际上,JavaScript不能直接调用Java对象的方法.通过DWR的中介,可以使用DWR动态生成 的JavaScript脚本来实现,该脚本的内部实现是依赖XMLHttpRequest的 DWR会生成两个JavaScript文件 engine.js:DWR的核心JavaScript文件,必须导入不能缺少 util.js:DWR的工具JavaScript文件,该文件中包含了一些工具方法,可以简化DOM操作 该文件不是必须的,而且可以脱离DWR单独使用 以上两个文件是动态生成的,其位置会随着DWRServlet的url不同而不同 http://localhost:8080/项目名/url-pattern上级目录名/engine.js http://localhost:8080/项目名/url-pattern上级目录名/util.js 导入DWR创建的Java对象对应的JavaScript http://localhost:8080/项目名/url-pattern上级目录名/interface/JavaScript对象名.js 注意:DWR的JavaScript脚本是动态生成的,因此在Web应用下找不到JavaScript脚本的源文 件

dwr 调用方式

dwr 调用方式

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入门教程

有两种方法开始DWR,简单的方式是下载WAR文件然后看看。

但是这不能帮你知道如何轻松的把DWR整合到你的web应用中,所以还是推荐你按照下面的3个步骤做:下载dwr.jar文件。

把它放到你的webapp的WEB-INF/lib目录下。

那里可能已经有很多其他的jar文件了。

需要把下面的代码加到WEB-INF/web.xml文件中。

<servlet>那部分需要和其他的<servlet>在一起,<servlet-mapping>部分也一样。

<servlet><servlet-name>dwr-invoker</servlet-name><display-name>DWR Servlet</display-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>在WEB-INF目录下的web.xml旁边创建一个dwr.xml文件。

可以从最简单的配置开始:<!DOCTYPE dwr PUBLIC"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN""/dwr/dwr10.dtd"><dwr><allow><create creator="new" javascript="JDate"><param name="class" value="java.util.Date"/></create><create creator="new" javascript="Demo"><param name="class" value="your.java.Bean"/></create></allow></dwr>DWR配置文件定义了那些DWR会创建提供远程调用的Javascript类。

dwr学习总结

dwr学习总结

Dwr学习总结1.首先要导入dwr包。

2.配置web.xml文件,格式如下:其中是用来测试dwr用的,可有可无。

3.在WEB-INF下面建立一个dwr.xml文件。

实例如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "/dwr/dwr20.dtd"><dwr><allow><!-- return String --><create creator="new" javascript="ud" scope="application"> <param name="class" value="ersDAO" /><include method="ifExist"></include></create><!-- return List --><create creator="new" javascript="pd" scope="application"> <param name="class" value="dao.ProductorDAO" /><include method="getAllProByTypeId"></include><include method="getOneProById"></include></create><convert converter="bean" match="bean.Productors"><param name="include" value="pid,proName,proCount" /></convert></allow></dwr>这里主要说下create的配置<create creator="new" javascript="ud" scope="application"><param name="class" value="ersDAO" /><include method="ifExist"></include></create>这是个最简单的配置,其中Creator:属性相当于创建的实例的方法,new 就相当于生成了一个实例对象,Javascript:这个是自定义的,用于在jsp页面中引用。

dwrinvokedataaction 方法详解

dwrinvokedataaction 方法详解

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学习小结三

DWR学习小结三
<convert match="org.li.dwr.Book" converter="bean"></convert>
呢,是因为在调用getBook和getUser的时候会返回给javascript有关User和Book的对象或数据,这里的用<convert match=”类” converter=”bean”/>做一下转换,否则javascript将不会得到有效的数据。
这个例子需要解释的就是dwr.xml了
在这里用到了两个java类,User、Book,方法呢就是User.getUser和User.getBook,而Book类呢由于我们没有在javascript中调用,所以就不用配置Book的create了。
大家可能会奇怪为什么会多出来两个<convert match="er" converter="bean"></convert>
下面讨论一下DWR的安全性,由于我们将javaBean整体都对外暴露了,所以说会有非常多的安全问题,真对这些DWR也作了一些的措施就是上面例子中dwr.xml的配置:
<include method="getUser"/>
<include method="getBook"/>
<filter class="org.li.dwr.log.DWRLog"></filter>
真对DWR的安全性上来说,官方也不敢保证,官方只是说自己可以看一下源代码因地施宜。
不过DWR可以和acegicegi的集成,先放一放日后补充。

dwr使用教程

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框架开发实现多级关联的选择框应用示例

跟我学DWR框架技术——应用DWR框架开发实现多级关联的选择框应用示例

1.1跟我学DWR框架技术——应用DWR框架开发实现多级关联的选择框应用示例在设计数据库查询页面时,下拉菜单是经常使用的元素。

很多时候你会希望选择了下拉菜单的一项后,相应的另一下拉菜单的内容会随之改变。

这种功能可以通过刷新页面来实现,但界面显得不那么友好。

在本文介绍例子中,不需要刷新页面便可达到目的。

当在下拉菜单中选择了一个省份后,另一下拉菜单会出现该省份的一些城市供选择。

下面另外DWR实现“用户名称的实时校验”和“关联的选择框”的表单。

1.1.1构建本示例项目中的相关程序及Web页面1、在项目中再添加一个业务接口(1)提供一个接口CityManageInterface,包名称为com.px1987.dwrexampl.model(2)在该接口中提供下面的方法定义package com.px1987.dwrexampl.model;import java.util.*;public interface CityManageInterface{public boolean checkUserNameValid(String userName);public HashMap getCityNameInfo(String privanceName);}2、为该接口提供一个实现类(1)类名称为CityManageBean,包名称为com.px1987.dwrexampl.model(2)编程CityManageBean程序类该类中的checkUserNameValid方法实现对用户名称进行检查,而getCityNameInfo方法主要是实现根据“省名称”获得其对应的“城市名称”。

package com.px1987.dwrexampl.model;import java.util.HashMap;public class CityManageBean implements CityManageInterface{public CityManageBean(){}public boolean checkUserNameValid(String userName)boolean okOrNot=false;if(userName.equals("yang")) //实际应该改变为对数据库系统的访问{okOrNot=true;}else{okOrNot=false;}return okOrNot;}public HashMap getCityNameInfo(String privanceName){ //实际应该改变为对数据库系统的访问HashMap cityNameHashMap =new HashMap();if (privanceName.equals("beijing")){cityNameHashMap.put("海淀","海淀");cityNameHashMap.put("朝阳","朝阳");cityNameHashMap.put("西城","西城");cityNameHashMap.put("东城","东城");}else if (privanceName.equals("hebei")){cityNameHashMap.put("石家庄", "石家庄");cityNameHashMap.put("邯郸", "邯郸");cityNameHashMap.put("保定", "保定");cityNameHashMap.put("衡水", "衡水");}else if (privanceName.equals("henan"))cityNameHashMap.put("郑州", "郑州");cityNameHashMap.put("驻马店", "驻马店");cityNameHashMap.put("郑州1", "郑州1");cityNameHashMap.put("郑州2", "郑州2");}else if (privanceName.equals("jiangxi")){cityNameHashMap.put("南昌", "南昌");cityNameHashMap.put("九江", "九江");cityNameHashMap.put("景德镇", "景德镇");cityNameHashMap.put("吉安", "吉安");}return cityNameHashMap;}}3、将该JavaBean部署为远程JavaBean以便能够在页面中访问它(1)在我们的dwr-timeBean.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="timeInfoJavaBean" scope="application"><param name="class" value="com.px1987.dwrexampl.model.TimeInfoJavaBean"/><include method="getSystemTime"/><include method="setOneTimeInfoVOBean"/></create><create creator="new" javascript="cityManageBean" scope="application"> <param name="class" value="com.px1987.dwrexampl.model.CityManageBean"/><include method="getCityNameInfo"/><include method="checkUserNameValid"/></create><convert converter="bean" match="com.px1987.dwrexampl.model.TimeInfoVOBean"> <param name="include" value="hourText,minuteText,secondText"/> </convert></allow></dwr>(2)编译该项目并再次部署本项目,在浏览器中查看其*.js文件名称:输入http://localhost:8080/DWRWebTest/dwr/index.html然后点击上面的“cityManageBean”的超链接,将出现下面的内容从而获得在页面中对该JavaBean进行远程引用时的*.js文件名称<script type='text/javascript' src='/DWRWebTest/dwr/interface/cityManageBean.js'></script>(3)也可以对我们的业务组件中的方法在线测试1)对checkUserNameValid方法在线测试2)对getCityNameInfo方法在线测试与代码中的实际返回的值保持一致。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).
一、一个简单的DWR示例。

第一步:拷贝dwr.jar包到项目的lib目录下。

第三步:添加dwr.xml文件
第四步:添加HTML页面。

第一、把java类转化为javascript类由dwr自动完成,只需简单的配置。

第二、应用起来极其简单。

开发者不要改服务器代码就可以集成。

第三、容易测试。

和webwork一样,隐藏的http协议。

第四、及强扩展性。

例如与spring集成,只需修改一点代码。

第五、性能。

就我与jason,等简单比较,dwr性能可能是最好的。

第六、自动把java对象转化为javascript对象,并且及易扩展。

四、再复杂一点,数组里面保存的是一个对象。

这些方法的参数和返回类型。

convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript 之间如何转换数据类型。

DWR自动地在Java和JavaScript表示之间调整简单数据类型。

这些类型包括Java原生类型和它们各自的封装类表示,还有String、Date、数组和集合类型。

DWR也能把JavaBean转换成JavaScript 表示,但是出于安全性的原因,要求显式的配置,<convertor>标签就是完成此功能的。

Converter="bean"属性指定转换的方式采用JavaBean命名规范,
match=""com.dwr.TestBean"属性指定要转换的javabean名称,<param>标签指定要转换的JavaBean属性。

相关文档
最新文档