0. WebX項目目前已開源, 項目開源地址:https://github.com/webx/citrus-sample.git 項目參考文檔:http://www.openwebx.org/docs/1. 為什麼不使用SpringMVC,而是使用WebX? 當初阿裡巴巴建站的時候,並沒有現在...
0. WebX項目目前已開源,
項目開源地址:https://github.com/webx/citrus-sample.git
項目參考文檔:http://www.openwebx.org/docs/
1. 為什麼不使用SpringMVC,而是使用WebX?
當初阿裡巴巴建站的時候,並沒有現在這麼成熟的多種框架技術(springMVC等);其次,WebX這些年也已經經受住了諸如‘雙十一’的大訪問,高併發的考驗;但我認為最為重要的一點還是為了安全。對於開源的代碼,沒有人能保證其安全性或對其進行嚴格的滲透測試。因此,漏洞可以通過「導入代碼」的後門入侵到內部系統。造成了企業對這些漏洞一無所知,攻擊者卻對它們瞭如指掌的現狀。[2014年註明的OpenSSL漏洞就是這種情況]。
2. WebX簡介
WEBX就是把頁面與Service層之間的一些Servlet等公共的東西抽象出來,提供相應的服務以提高開發效率,可以看出,webx和傳統的servlet-action模式的HettpServlet為基礎,對其中的公用的抽象整理後,得到一個輕量級的web開發框架。webx頁面使用了velocity模板,WEB層使用的是WEBX框架裡面的TemplateAction, TemplateScreen, AbstractModule, TemplateControl,解決了操作和頁面的跳轉。持久層使用ibatis,Bean容器使用的是Spring。
如上圖所示是WebX的層次結構,從內到外,springExt基於Spring,提供了擴展組件的能力;WebX Framework則基於Servlet API,提供基礎服務。WebX Turbine基於WebX Framework,實現具體的網頁功能。(turbine['tɜːbaɪn; -ɪn],渦輪機,渦輪)。
一個好的框架,並不是實現了所有的功能,而是具有超強的擴展能力。
3. 項目結構簡單介紹
由於webx是基於準的JavaEE Web用範,因此它的目錄結構是我們均熟悉的B/S構。
4. WebX的請求執行流程
1.對於URL:http://localhost:7001/petstore/user/account/edit.htm(htm是為了相容過去的DOS命名格式存在的,在效果上沒有區的,HTM 為DOS三字元文件擴展名時代而來;HTML為Windows時代支持多字元擴展名)
我們知道http(協議)、localhost(Server name可以在C:\Windows\System32\drivers\etc\hosts中來配置)、7001(埠號)、petstore(context path)、user(conponent path)、account/edit.htm(servlet path)、account/edit.vm(target)。
2.根據埠號,伺服器把該請求交給petstore應用,再根據/account/edit.htm(Servlet Path路徑)。在web.xml中把*.htm映射到Webx Controller Servlet,所以Webx Controller Servlet就接管了這個請求。
3.Webx Controller Servlet激活pipeline,而用AnalyzeURLValve分析/edit.htm是什麼意思。根據webx預設的映射,/edit.htm被映射成/ edit.vm。
4.根據target查找screen模板:/screen/edit.vm,假如target的值:/xxx/yyy/edit.vm,那麼,valve會:在/templates/screen目下,找到/xxx/yyy/edit.vm模板。然後依次查找screen類:xxx.yyy.Edit (如果找不到,下一個)、xxx.yyy.Default (如果找不到,下一個)、xxx.Default (如果找不到,下一個)、Default (如果找不到,下一個)、TemplateScreen (系統默screen,不可能找不到的)。
5.screen類,渲染screen模板。如果存在layout佈局,渲染layout,screen類,並渲染screen模板。根據target查找layout模板,渲染layout模板。
6.渲染在layout模板中引用的兩個control:head.vm:在head.car中查找/control/head.vm;bottom.vm :在bottom.car中查找/control/bottom.vm。