- 现把我学习DWR的一些心得写出来,供大家参考,由于是个人心得,所以难免在措辞方面,概念方面把握不准确的地方,还请大家见谅,发现有什么问题,或者你有什么好的观点,意见都可以留下来。
- 1.配置说明:
- 1).首先在web.xml中添加如下语句。
- <servlet>
- <servlet-name>dwr-invokerservlet-name>
- <servlet-class>uk.ltd.getahead.dwr.DWRServletservlet-class>
- <init-param>
- <param-name>debugparam-name>
- <param-value>trueparam-value>
- init-param>
- servlet>
-
- <servlet-mapping>
- <servlet-name>dwr-invokerservlet-name>
-
- <url-pattern>/dwr/*url-pattern>
- servlet-mapping>
-
- 2).新建一个dwr.xml文件,和web.xml同目录。
-
- <!--sp-->xml version="1.0" encoding="UTF-8"?>
- <!--CTYPE dwr PUBLIC </sp-->
- "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
- "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
-
- <dwr>
- <allow>
- <create creator="new" javascript="JDate"> //对应JavaScript文件名,即:JDate.js在这个文件中有一个名为JDate的JavaScript对象
- <param name="class" value="java.util.Date"/> //对应Java类。
- create>
- <create creator="new" javascript="Student">
- <param name="class" value="com.dwr.test.Student"/>
- create>
- <convert converter="bean" match="com.dwr.test.*" >convert>
- allow>
- dwr>
-
- 然后启动服务访问:http://localhost:8080/应用名/dwr (如果是ROOT方式部署的,可以省去应用名)
-
- 2.被映射的JavaBean对象中方法的修饰符只有为Public才可以被暴露出来,private ,protected,package都不会暴露,支持继承体系,如果当前被映射的Bean有父类中提供了某Public方法,该方法也会暴露出来。Bean中的属性是不会暴露出来的。
- <create creator="new" javascript="Student">
- <param name="class" value="com.dwr.test.Student"/>
- <include method="getUserName"/>
- create>
- 另外还可以在dwr.xml <create><create>中明确描述那些公共的方法可以暴露给外界。如: <include method="getUserName"/> 表示把com.dwr.test.Student中的getUserName()方法暴露出来。如果不写<include>配置,表示把所以的Public方法都暴露,如果写了<include>则只暴露明确指定的方法。
-
- 3.Avoid reserved JavaScript words; Methods named after reserved words are automatically excluded. Most JavaScript reserved
- words are also Java reserved words, so you won't be having a method called "try()" anyway. However the most common gotcha is "delete()", which has special meaning from JavaScript but not Java.
- Overloaded methods can be involved in a bit of a lottery as to which gets called, so avoid overloaded methods.
-
- 4.
- <script type='text/javascript' src='/dwr/interface/Student.js'>script>
- <script type='text/javascript' src='/dwr/engine.js'>script>
- <script type='text/javascript' src='/dwr/util.js'>script>
- 在需要使用Dwr框架直接范文JavaBean的Jsp页面中添加如上三条语句。 /dwr/engine.js,/dwr/util.js是固定的,是Dwr的脚本驱动Js和常用
-
- 的工具类用来对返回的信息加工处理的。/dwr/interface/Student.js是用户需要直接访问的JavaBean对应的JavaScript映射。注意路径的书写,以及相对位置,这几个文件的层次结构是固定的。并且应用在部署的时候要选择Root方式,否则找不到路径。
-
- 5.
- <input type='button' onclick='javascript:Student.getUserName(reply);' value='Execute' >
- <script type='text/javascript'>
- var reply = function(data)
- {
- alert(data);
- }
- script>
-
- 前面说过:/dwr/interface/Student.js中有一个和Student同名的对象。即:Student。所以在调用这个Js中方法时需要加上这个对象名,
- Student.getUserName(reply),这样处理是为了避免在引入两个Bean,他们对应的JavaScript映射文件中出现相同的函数名情况下的调用混乱。
-
- Student.getUserName(reply)
- 在Student.js文件中对应着:
- Student.getUserName = function(callback) {
- dwr.engine._execute(Student._path, 'Student', 'getUserName', callback);
- }
- 可见reply参数是必须的,而且这个参数是一个function类型。用来接受从后台返回来的值。 返回的值就存放在变量data中,我们自己的Javascript的最后需要的处理的值就是data.
-
- 函数reply的作用就是被回调并带回用户所需的值。可以把这个方法设置为通用方法。统一取得值,放到全局变量中。如本例中accessRemoteData.js文件中的getRemoteData方法。
-
- 6.
- AJAX是异步实现的,并且AJAX确实是为了异步的实现才引入近来的。但是,AJAX仍然也支持同步的调用。在纯粹的XMLHttpRequest中可以设置调用是否是异步的。XMLHttpRequest的open函数是有一个是否同步参数,如下:
- XMLHttpRequest.open(String method, String URL, boolean asynchronous)
- 其中的asynchronous就是是否同步的参数了。
- 在DWR的engine.js文件,有setAsync方法,就是设置调用是否是同步的,还是异步的。
-
- dwr.engine.setAsync(false); 设置为同步运行.
- dwr.engine.setAsync(true); 设置为异步运行.
-
- 同步模式:
- <input type='button' onclick='javascript:dwr.engine.setAsync(false); Student.getUserName(getRemoteData);alert(message)'/>
-
- 异步模式:
- <input type='button' onclick='javascript:dwr.engine.setAsync(true); Student.getUserName(getRemoteData); alert(message)'/>
-
-
- A;—>异步线程
- |
- B;
- 具体表现为:在A语句体中启动了一个异步线程,到后台获取信息。如果为异常模式,在启动A异步线程之后,B继续执行。
- 如果为同步模式:在启动A异步线程之后,B并不执行,直到后台获取信息的动作结束,并返回后才执行。
-
- 7.
- <convert converter="bean" match="com.dwr.test.*" >convert>
- 把JOPO对象反转成JavaScript的对象。match表示对这个包下面所有的JOPO都可以转换。之前说了:进行远程方法调用时,需要传递一个回调函
-
- 数,用来取回自己所需要的值,最后这个值付给了回调函数的形参变量data
- 如果调用的方法是 Student.getUser(callback).那么返回的data是“Object”类型。如果User对象有userName,password属性,那么就可以直
-
- 接的data.userName ,data.password来取得对象(JavaScript对象)中的值。而这个JavaScrip对象,User就是Conver过来的。
-
- 如果返回的是一个普通POJO,此时data就代表Conver过来的POJO对象,那么可以直接由data.属性名来得到对应POJO中的值。
- 如果返回的是一个List, 此时data就代表Conver过来的List对象,用data[i]来取得List中下标为i的对象。如果取到的对象还是一个POjO,那么继续按照前一种方法处理。
- 如果返回的是一个Map, 此时data就代表Conver过来的Map对象,用data.key1来取得"Key1"对应的对象,data.key1.userName;
|
相关推荐
DWR学习资料 :DWR 3.0 上传文件.txt DWR3.0反向Ajax示例.txt DWR3.0学习笔记.txt DWR3.0学习网址.txt dwr分页.doc DWR分页代码.doc DWR中文文档.doc DWR中文文档.pdf dwr做comet的完整实现.doc Spring整合DWR comet ...
一些DWR的学习资料,包括DWR的使用笔记,DWR的界面开发,和DWR的中文文档等
dwr学习总结 dwr学习总结 dwr学习总结
DWR案例DWR学习案例详解(数据库)DWR学习案例详解(数据库)DWR学习案例详解(数据库)
dwr学习教程2
包换7个文档,DWR学习笔记,中文API,DWR开发培训.ppt,WEB界面开发规范.doc,DWR.xml配置文件说明书.doc,DWRchinese.pdf,
dwr学习实例 初学者的宝,dwr学习实例 dwr实例 dwr初学者实例教程
dwr学习实例(简单登陆,完整包版,下载可直接跑) 刚做好,用的sql2005+myEclipse8.5+Hb3.2就是没做好可以注册用户名的提醒,学习中。。!
一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例一个简单DWR学习二级菜单实例
DWR学习笔记和与spring整合练习,DWR学习笔记和与spring整合练习,DWR学习笔记和与spring整合练习,DWR学习笔记和与spring整合练习,
PDF格式的DWR学习课件 PDF格式的DWR学习课件 PDF格式的DWR学习课件
很好的学习资料;资料中包括DWR.xml配置文件说明、DWR学习
DWR学习资料+PPT 包括 DWR中文文档.pdf , 及一套DWR 的 ppt 学习教程 , DWR[1].xml配置文件说明书.doc
DWR学习笔记及经验总结,内包含dwr数控件,学习课件和学习笔记。
dwr学习笔记pdf文件,根据笔记内容即可学会使用dwr框架
dwr学习必读,其中包含了:dwr怎样获取LIST的值,dwr与STRUTS的融合等.
DWR学习文档易懂 好东西 下载学习学习
DWR学习讲解带源码,两个例子,都带有文档说明和源码
DWR学习笔记(附带很详细的例子),初学者必备
DWR学习笔记(教授如何配置DWR和详细的工程实例) 看完就会!