dwr
DWR原理通过前面五章学习,对DWR整体有所了解,但是我仍然对核心细节不是很清楚。我最后的办法就是单步调试,调试之后将所有东西串一串,DWR的原理就清楚了,搞清楚核心生产线,其他全是辅助的,没必要再分析了。老外聪明啊,服。我们以DWR的第一个样例为例Dynamically Text 1,在index.html里面我们嵌入 <script type='text/javascript' src='../dwr/engine.js'> </script> <script type='text/javascript' src='../dwr/util.js'> </script> <script type='text/javascript' src='../dwr/interface/Demo.js'> </script> 前面两个都是DWR系统默认需要加载的,Demo.js是Demo.java所对应的。按理论,只要在web.xml和dwr.xml配置好,那么我们就可以在客户端操作Demo.js,类似于操作服务器端的Demo.js。 HTML source:<p> Name: <input type="text" id="demoName"/> <input value="Send" type="button" onclick="update()"/> <br/> Reply: <span id="demoReply"></span> </p>
Javascript source:function update() { var name = dwr.util.getValue("demoName"); Demo.sayHello(name,function(data) { dwr.util.setValue("demoReply",data); }); }
Java source:package org.getahead.dwrdemo.simpletext; public class Demo { public String sayHello(String name) { return "Hello," + name; } }
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="Demo"> <param name="class" value="org.getahead.dwrdemo.simpletext.Demo"/> </create> </allow> </dwr>
在浏览器第一次加载本页面时,浏览器第一步发现<script type='text/javascript' src='../dwr/engine.js'> </script>,根据web.xml关于dwr的配置,系统会激发Servlet的POST方法,向客户端输出engine.js文件流,这个文件你可以在IE的缓存里面发现,当然,程序会在最后输出一刻比较客户端是否已经存在该文件,如果要输出的文件流大小和和该文件大小一致,就不输出了,同样util.js、Demo.js也是这么输出的。那么看看Demo.js文件里面的内容如下:
if(typeofthis['Person']!='function'){
functionPerson(){ this.address=null; this.phoneNumber=null; this.name=null; this.id=0; this.salary=0; } } //Provideadefaultpathtodwr.engine if(typeofthis['dwr']=='undefined')this.dwr={}; if(typeofdwr['engine']=='undefined')dwr.engine={}; if(typeofthis['Demo']=='undefined')this.Demo={}; Demo._path='/dwr/dwr'; Demo.sayHello=function(p0,callback){ returndwr.engine._execute(Demo._path,'Demo','sayHello',p0,callback); }; Demo.getInclude=function(callback){ returndwr.engine._execute(Demo._path,'getInclude',callback); }; 这样我们就知道了,实际上Demo.java类的sayHello方法已经被解释到Demo.js中了,只不过后面的调用还不是很清楚而已。 callCount=1
windowName=DWR-442B435899 c0-scriptName=Demo c0-methodName=sayHello c0-id=0 c0-param0=string:Joe batchId=1 page=/dwr/simpletext/index.html httpSessionId= scriptSessionId=1CC3A.0A3
至此,dwr的核心原理,基本清晰 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |