深入dwr2之三 Dwr2页面请求处理机制分析之engine.js

作者:ikon999 发布于:2008年12月02日 13:30

DWREnginedwr在客户端的存根,它其中的方法基本上不需要用户来直接调用;通常你会在服务器的dwr.xml定义需要暴露的java类及其可调用方法,dwr会根据这个配置文件自动生成一个dwr/interface/**.js文件,对应你暴露的java类及其方法,你会在本地调用**.js文件定义的方法,和调用java的方法一样,除了多了一个回调参数,然后这个方法会委托DWREngine._execute发出请求;

Engine.jsutil.js不同之处在于,util.js是静态js文件,可以直接从jar文件中拿出来,页面可以直接引用;而engine.js则有部分动态内容,这决定了它必须经过servelt资源请求,在servelt为动态内容赋值之后,才可以返回给客户端;

/** The original page id sent from the server */

dwr.engine._origScriptSessionId = “${scriptSessionId}”;

/** The session cookie name */

dwr.engine._sessionCookieName = “${sessionCookieName}”; // JSESSIONID

/** Is GET enabled for the benefit of Safari? */

dwr.engine._allowGetForSafariButMakeForgeryEasier = “${allowGetForSafariButMakeForgeryEasier}”;

/** The script prefix to strip in the case of scriptTagProtection. */

dwr.engine._scriptTagProtection = “${scriptTagProtection}”;

/** The default path to the DWR servlet */

dwr.engine._defaultPath = “${defaultPath}”;

/** Do we use XHR for reverse ajax because we are not streaming? */

dwr.engine._pollWithXhr = “${pollWithXhr}”;

这些变量值,会在页面每次刷新时,服务器会重新赋值;

一、下面是engine.js中一些变量和方法的解释:

1、 origScriptSessionId

原始脚本sessionid,随每次刷新而改变;它与我们所说的httpsessionid是有区别的,httpsessionid是保存在服务器端,origScriptSessionId是保存在客户端的;

2、 dwr.engine._getJSessionId

得到我们所说的httpsessionid,这个id在整个会话生命周期内不变;

3、 dwr.engine._sessionCookieName

_getJSessionId方法引用,用来获取httpsessionid的;

4、 scriptSessionId

页面sessionid,由origScriptSessionId加上一个随机数生成;它是客户端发给server的;每次发送值都不相同;

5、 preHooks

前钩方法 dwr进行远程方法调用的之前调用

6、 postHooks

后钩方法 dwr进行远程方法调用的之后调用;

7、 DWREngine.beginBatch()

开始批处理; 包装请求头

8、 DWREngine.endBatch()

提交批处理;

9、 rpcType

dwr的请求类型;

DWREngine.defaultMessageHandler(abc);默认的消息句柄;

DWREngine.setTextHtmlHandler;当接收到html时发生的事件;

DWREngine.setErrorHandler(abc); 默认错误句柄;

DWREngine.setWarningHandler(abc);默认警告句柄;

DWREngine.setTimeout(0); 超时时间设置,默认是0;

//三种调用方法;

DWREngine.XMLHttpRequest = 1;

DWREngine.IFrame = 2;

DWREngine.ScriptTag = 3;

DWREngine.setMethod(<1 or 2 or 3>);设置调用远程的方法;

DWREngine.setVerb = function(<’GET’ or ‘POST’>);设置发送数据的方法;

DWREngine.setOrdered(<true or false>);设置xhr的请求按顺序执行.<官方强烈建议不要用这个,会变的很慢而且无法预测.>

DWREngine.setAsync (<true or false>);设置xhr的请求方法是否异步?默认是true(异步);

二、url对应的处理handler

1、 createUrlMapping(container, “/engine.js”, “engineHandlerUrl”, EngineHandler.class);

2、 org.directwebremoting.servlet.EngineHandler.java

继承了FileHandler,并且setDynamic(true);

首先根据/engine.js scriptCache 里取,如果没有的话根据/org/directwebremoting/engine.js,classpath路径加载;从输入流每行过滤${}的字符,由LocalUtil类替换成真正的内容;

scriptCompressed :是否保留javascrpt文件中的空行和注释;

作者:ikon999
来源:北风技术专栏
原文链接:http://column.ibeifeng.com/51564/20081202235.shtml

( 内容完 )

添加收藏到:

您可能还对这些文章感兴趣:

  • 认识安全框架acegi(3)
  • 关于Java缺乏多继承机制的探讨
  • Asp.net的IP地址屏蔽功能设计
  • Spring总结实例之消息与事件
  • M8系统编程应用之数字时钟的实现
  • 用C语言在NDS上编写程序
  • struts2系列1:环境搭建(helloworld)
  • 详谈基于JSON的高级AJAX开发技术
  • 为什么我们要从现成的游戏引擎学习开始
  • 艺术,真的和Haskell有关吗?
  • 1条评论, 我来评论

    1. zhizhihcun

      文章挺适合我看的,谢谢

    小贴士:评论需要管理员审核后才会显示。请不要发布与国家法律相抵触的言论,北风网将保留追究责任的权利。
    类似“顶”、“沙发”、“支持”之类没有营养的文字,对勤劳贡献的作者来说是令人沮丧的反馈信息。
    请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
    如果您发现自己的评论没有被审核或者不见了,请参考以上三条。

    每周之星

    陈臣陈臣

    七年Java和JEE开发经验,JEE应用设计和高级架构师,拥有Sun的多项Java和J2EE方面的技能认证,多年项目经理、技术部经理的管理经验。拥有全面、扎实的Java和JEE理论知识,丰富的JEE应用开发经验。

    更多作者:

  • Adam
  • ikon999
  • jk1234
  • jk2345
  • libin_8745
  • lifengxing
  • taohuang100
  • xingkong
  • 北风
  • 呆子
  • 子晨
  • 小白
  • 张章
  • 张维亮
  • 陈臣
  • 陶宝哥
  • 风风
  • 最新内容

    推荐内容

    标签

    分类