深入dwr2之三 Dwr2頁面請求處理機制分析之engine.js
DWREngine是dwr在客戶端的存根,它其中的方法基本上不需要使用者來直接呼叫;通常你會在伺服器的dwr.xml定義需要暴露的java類及其可呼叫方法,dwr會根據這個配置檔案自動生成一個dwr/interface/**.js檔案,對應你暴露的java類及其方法,你會在本地呼叫**.js檔案定義的方法,和呼叫java的方法一樣,除了多了一個回撥引數,然後這個方法會委託DWREngine._execute發出請求;
Engine.js與util.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(
DWREngine.setAsync (
二、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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ASP.NET頁面執行機制以及請求處理流程ASP.NET
- 自定義處理頁面請求
- ThinkPHP6 原始碼分析之請求處理PHP原始碼
- 【Zookeeper】原始碼分析之請求處理鏈(一)原始碼
- ASP.Net請求處理機制初步探索之旅(5):ASP.Net MVC請求處理流程ASP.NETMVC
- 【Zookeeper】原始碼分析之請求處理鏈(三)之SyncRequestProcessor原始碼
- 【Zookeeper】原始碼分析之請求處理鏈(二)之PrepRequestProcessor原始碼
- ikon999原創:Dwr2的日誌程式碼分析
- 【Zookeeper】原始碼分析之請求處理鏈(四)之FinalRequestProcessor原始碼
- ASP.Net請求處理機制初步探索之旅(4):WebForm頁面生命週期ASP.NETWebORM
- 圖解 Spring:HTTP 請求的處理流程與機制【1】圖解SpringHTTP
- ASP.Net請求處理機制初步探索之旅(3):管道ASP.NET
- ASP.Net請求處理機制初步探索之旅(2)核心ASP.NET
- ASP.Net請求處理機制初步探索之旅(1):前奏ASP.NET
- WebForm 頁面ajax 請求後臺頁面 方法WebORM
- 深入理解java異常處理機制Java
- 淺談如何在專案中處理頁面中的多個網路請求
- 請求資料處理
- wordpress 處理 ajax 請求
- Mongodb請求處理流程MongoDB
- .NET處理HTTP請求HTTP
- 處理REST SOE請求REST
- 頁面渲染機制
- 深入Liferay當頁面請求css資源利用parseSass()方法解析CSS
- 【面試】Web 頁面請求歷程面試Web
- Spring MVC 處理一個請求的流程分析SpringMVC
- Kafka原始碼分析(四) - Server端-請求處理框架Kafka原始碼Server框架
- SpringMVC請求處理流程SpringMVC
- 請求處理管道個人理解
- nginx處理http請求流程NginxHTTP
- springmvc處理ajax請求SpringMVC
- Scrapy原始碼閱讀分析_4_請求處理流程原始碼
- yai 請求預處理指令碼AI指令碼
- Go Web如何處理Web請求?GoWeb
- DeferredResult——非同步請求處理非同步
- nginx 如何處理一個請求Nginx
- Laravel請求處理管道理解Laravel
- html頁面中如何傳送ajax請求HTML