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

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();设置发送数据的方法;


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


DWREngine.setAsync ();设置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文件中的空行和注释;
更多详情

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29212814/viewspace-1130597/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29212814/viewspace-1130597/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值