DWR和Ajax的简介和精通
来源:互联网 发布:网络各层协议解析 编辑:程序博客网 时间:2024/06/04 18:32
DWR和Ajax的简介
一. DWR
1. 概念
Ø DWR(Direct Web Remoting)
·是一个WEB远程调用框架,利用这个框架可以让AJAX开发变得很简单。
·改进了DHTML库(DWRUtil)的表格和形式,集成了Struts、JSF和Beehive,且改进了与Spring、Hibernate及其他脚本语言的支持
> DWR 是最专业也是支援最广的 AJAX 非同步传输 Framework
> 通俗的理解:
Dwr可以让客户端直接来调用服务器远程对象的方法
Dwr将java对象转换发送到客户端浏览器,也可以将JavaScript中间的内容发送到服务器
2.作用
> 它具有一套Javascript功能集,它们把从HTML页面调用应用服务器上的Java对象的方法简化了。
> 它操控不同类型的参数,并同时保持了HTML代码的可读性
3. dwr的设计构思很是巧妙:
> 把java类转化为javascript类由dwr自动完成,只需简单的配置。
> 应用起来极其简单。开发者不要该服务器代码就可以集成。
> 容易测试。和webwork一样,隐藏的http协议。
> 强扩展性。例如与spring集成,只需修改一点代码.
自动把java对象转化为javascript对象,并且及易扩展
4. 解决问题:
> 让远端Java对象存放在 session 或 application scope ?
@ 对象的 scope 可以透过 dwr.xml 內的 create 属性设定 application, session, request, page
< create creator="new“javascript="HelloWorld" scope="page" >
> 方法的参数可以是自定义的类型 ?
Conver: 定义在 dwr.xml 中描述远程对象,var r = Remote.method(param)
<!-- convert将Message的对象进行转换-->
<convert converter="bean“ match="com.yd.colbean.Message" />
> 任何远程服务器上的Java足见上的方法都可以调用?
可在 dwr.xml 中设定Java组件方法存取的权限
exclude 排除某个属性或方法
Include 包含某个属性和方法
<create creator="new" javascript="userAction" scope="session">
<param name="class" value="com.yd.colbean.UserCol"></param>
<include method="getUserMessage" /><exclude method=“removeMessage”/></create>
<convert converter="bean" match="com.yd.colbean.UserBean">
<param name="include" value="username"></param>
<param name=“exclude" value=“password"></param>
</convert>
> 在dwr对应的远程对象中间,访问web容器中间的对象?例如获取request,response,session
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
//得到WebContext对象
WebContext webcontext = WebContextFactory.get();
//得到对应的session对象
HttpSession session = webcontext.getSession();
//webcontext.getHttpServletRequest();
//webcontext.getHttpServletResponse();
> 在java对象的方法中间返回对象的集合?
可以返回集合对象.例如List和Map对象
List一般保存相同的对象.返回到客户端一个对象数组,
map返回一个集合,里面包含各个对象.
> 連續呼叫三個遠端函式, 這樣使用者會等比較久嗎?
會的.
解决方案:
若需要將數個 dwr 功能一次送出, 請將需要在同一個交易內的功能放到 Batch 中
DWREngine.beginBatch()
webBean.getCount(deal);
webBean.addSession(100);
webBean.getCount(deal);
DWREngine.endBatch();
> 能否使用过滤器?
写一个类实现AjaxFilter接口,在配置文件中间配置即可
在Dwr.Xml中加上<filter class="类的绝对位置"></filter>
> 客户端操作数据
·导入util.js.就可以使用下列方法
DWRUtil.getValue(“username”); //这个方法得到页面中间id为username的值
DWRUtil.setValue(“rst”,”你好”); //这个方法设置页面中间id为username的值
·对下拉框的操作
DWRUtil.removeAllOptions('rst');//删除列表中的所有option
//添加option对象,goods是对象数组,其属性id作为option的value值。其属性msg作为option的text的值
DWRUtil.addOptions('rst', goods,"id","msg");
·对表格操作的方法
DWRUtil.removeAllRows("rst");//删除tbody中间所有的行
DWRUtil.addRows("rst", goods,[getid, getmsg]);//添加表的行,goods数组
5. 工作原理:
1、web服务器启动,DWRServlet init()方法调用,init主要做了以下工作。设置日志级别、实例化DWR用到的单例类(这些类在jvm中只有一个实例对象)、读去配置文件(包括dwr.jar包中的dwr.xml,WEB-INF/dwr.xml. config*.xml)。
2、请求处理
DWRServlet.doGet, doPost方法都调用processor.handle(req, resp)方法处理。
Processor对象在init()方法中已经初始化了。
> engine.js和util.js是 dwr 的公用 script, 而TestDWR.js 是自己註冊的遠端物件script
---Init()方法的代码:
String pathinfo = req.getPathInfo();
if(pathinfo != null && pathinfo.equalsIgnoreCase("/engine.js")){ doFile(resp, "engine.js", "text/javascript";}
else if(pathinfo != null && pathinfo.equalsIgnoreCase("/util.js")){doFile(resp, "util.js", "text/javascript");}
else if(pathinfo != null && pathinfo.equalsIgnoreCase("/deprecated.js")){doFile(resp, "deprecated.js", "text/javascript");}
else if(pathinfo != null && pathinfo.startsWith("/interface/")){ doInterface(req, resp); }
else if(pathinfo != null && pathinfo.startsWith("/exec")){doExec(req, resp); }
注意:
(1)dwr/index.html,dwr/test/这种只能在debug模式下使用,调试用。
dwr/engine.js,dwr/util.js,dwr/deprecated.js当这个请求到达,从dwr.jar包中读取文件流,响应回去。(重复请求有缓存)
(2)当dwr/interface/这种请求到来,(例如我们在index.html中的 <script type='text/javascript' src='dwr/interface/JDate.js'></script>)DWR做一件伟大的事。把我们在WEB-INF/dwr.xml中的
<create creator="new" javascript="JDate">
<param name="class" value="java.util.Date"/>
</create>
java.util.Date转化为javascript函数。
http://localhost:port/simpledwr/dwr/interface/JDate.js看看吧。
细节也比较简单,通过java反射,把方法都写成javascript特定的方法。(我觉得这些转换可以放到缓存里,下次调用没必要再生成一遍,不知道作者为什么没这样做)。
(3)dwr/exec
javascript调用方法时发送这种请求,可能是XMLHttpRequest或IFrame发送。
当然,javascript调用的方法签名与java代码一致,包括参数,还有javascript的回调方法也传到了服务器端,在服务器端很容易实现。回调方法的java的执行结果 返回类似 <script>callMethod(结果)<script>的javascript字符串,在浏览
二. Ajax
1·出现的必要性:
> 传统web编程中,客户端和服务器进行数据交换的方式,使页面重复加载,
而页面重载循环是最大的一个使用障碍
> Ajax(即asynchronous JavaScript And XML)是一种 Web 应用程序开发的手段,
它采用 客户端脚本 与 Web服务器交换数据。
所以,不必采用会中断交互的完整页面刷新,就可以动态地更新Web 页面,即无刷新更新页面技术
2·.涉及到的技术:
·基于标准的表示技术,使用 XHTML和 CSS标准化呈现
·动态显示和交互技术,使用Document Object Model(文档对象模型DOM)实现动态显示和交互
·数据互换和操作技术,使用 XML 和 XSTL进行数据交换与处理,
·异步数据获取技术, 使用XMLHttpRequest对象进行异步数据读取Javascript 绑定和处理所有数据
3·优势:
> 减轻服务器负担,要什么数据取什么数据
> 无刷新更新页面,减少用户心理和实际的等待时间
> 带来更好的用户体验
> 不需要下载插件或者小程序,浏览器一般都支持
> 进一步促进页面呈现和数据的分离
> 可以调用外部数据,可以对一些开发的数据比如 XML 文档 RSS 文档进行二次加工。
> 形象的说,就是采用了Ajax技术以后,解决了用户烦于等待的现象,
它可以在用户毫无察觉的情况下完成与服务器的交互过程.
俗话:欢乐不间断,享受不打折
4·Ajax的缺陷:
> AJAX 大量使用了 Javascript 和 AJAX 引擎,
而这个取决于浏览器的支持 IE5.0 及以上、Mozilla1.0 、NetScape7 及以上版本才支持,
Mozilla 虽然也支持 AJAX,但是提供XMLHttpRequest 的方式不一样。
> AJAX 更新页面内容的时候并没有刷新整个页面,因此,网页的后退功能是失效的。
> 对流媒体的支持没有 FLASH, Java Applet 好。
> 一些手持设备(如手机, 掌上电脑(PDA) 等)现在还不能很好的支持 Ajax 。
5·典型应用
数据校验
级联菜单
读取外部数据
7* XMLHttpRequest对象的应用
> XMLHttpRequest 是 XMLHTTP 组件的对象,通过这个对象,AJAX 可以像桌面应用程序一
样只同服务器进行数据层面的交换,而不用每次都刷新界面,工作都交给服务器来做,
从而减轻了服务器的负担
> 工程流程:
·对象初始化->发送请求-> 服务器接收-> 服务器返回-> 客户端接收 ->修改客户端页面内容
·XMLHttpRequest 对象初始化--->指定服务器返回数据后客户端浏览器的处理方式
---->发出HTTP请求---->处理服务器返回的信息(responseText和responseXML)
6* Ajax的工作原理
相当于在用户和服务器之间加了—个中间层, 使用户操作与服务器响应异步化。并 不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引 擎自己来做,只有确定需要从服务器读取新数 据时再由Ajax引擎代为向服务器提交 请求(主要是读取XML格式的数据)。
- DWR和Ajax的简介和精通
- ajax 和dwr
- ajax和dwr入门学习
- 工作流简介和精通
- dwr的使用和ajax的标签使用
- 使用DWR反转AJAX的失败经验和教训
- 使用DWR反转AJAX的失败经验和教训
- 使用DWR反转AJAX的失败经验和教训
- 实例比较DWR和AJAX应用的优缺点
- 基于struts2和DWR的Ajax输入校验
- dwr reverse ajax简介
- AJAX的简介和使用
- Ajax技术和DWR框架介绍
- AJAX简介和操作
- Ajax简介和简单的用法
- dwr和spring的整合
- DWR的搭建和使用方法
- DWR的搭建和使用方法
- 对吉利汽车副总裁王自亮的“飞行印象”
- 开博的话
- Hibernate的检索方式
- 利用权限禁止QQ的自动升级(QQUpdateCenter)
- VC调试入门
- DWR和Ajax的简介和精通
- 工作流简介和精通
- 设计模式初探2-创建型模式
- 信任
- 读书笔记之浮生六记
- 读书笔记之归去来辞
- 读书笔记之项脊轩志
- 读金庸小说
- 软件开发所必须做的事情的清单