《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > JavaEE without Ajax

JavaEE without Ajax

2008-07-24
作者:袁紅崗
???3 年前, “Spring 之父 ”Rod.Johnson 寫了一本在 Java 界引起轟動的書:《 Expert One-on-One J2EE Development Without EJB 》。這本書闡述了 EJB 作為 J2EE 核心技術所帶來的意義與價值,但作者用了更大篇幅介紹 EJB 的一些缺陷與不足,并提出了 Without EJB 的解決方案。正是由于 “J2EE Without EJB” 這個激動人心的口號及這本書奠定的基礎,導致了 Spring Framework 這個經典輕量級框架的誕生。
  2 年前, Ajax 開始進入人們的視野。時至今日, Ajax 已經成為一個紅得發紫的技術。但是今天,我想說一句: JavaEE without Ajax 。

Ajax 的“原罪”

  
Ajax 為什么這樣紅?有人說,是因為起了個好聽易記的名字(比如荷蘭著名的 Ajax 球隊,即阿賈克斯);也有人說,是因為 Google 全新的 Ajax 應用產品給人們帶來的超酷體驗(比如偉大的 Google Maps 、 GMail 等)。確實如此, Ajax 能夠如此流行的最主要原因就是它帶來了更好的用戶體驗" title="用戶體驗">用戶體驗,改變了人們對傳統 Web 應用的不佳印象。

???? 然而,即使 Ajax 的狂熱 Fans 也不得不承認的是,從技術層面上來說, Ajax 并沒有帶來什么新鮮的東西。它本質上是一種新瓶裝舊酒的技術,好處是通過 Java Script 與 DHTML 提供了一種異步編程模型,從而使 Web 應用給客戶帶來了更好的人機體驗。正如我在去年引起大家爭論的拙文《 Ajax ,只是一種過渡技術》中表述的: Ajax 解決問題的層面較低?;蛘哒f,它解決問題的方法與手段,很難形成一種可高度抽象的框架級解決方案。并且,正是因為 Ajax 基于 Java Script ,因此不可避免地帶來了 Java Script 的諸多缺點,譬如:
????? - 跨瀏覽器是一場噩夢
????? - 對搜索引擎的支持不好
????? - 干掉了 Back 、 History 等按鈕(盡管我并不認為 Back 、 History 是什么好東西)
????? - 開發與維護成本過高

要 Java, 不要 Java Script
  ?
We Love Java, Not Java Script 。套用毛澤東的慣用句式就是: “ 要 Java, 不要 Java Script” 。相信很多讀者看完這個標題也許會不以為然,但這句話卻代表了許多 J2EE 開發人員的心聲。
  眾多 Java 工程師都對 Java 有一種近乎偏執的喜愛,他們熱愛 Java 的簡潔與優雅。但一旦讓他們去進行 Java Script 的開發,卻往往會不知所措:過度靈活的語法,無法通過編譯器進行語法校驗,缺乏良好的調試工具等等這些,都會讓人們對 Java Script 畏手畏腳,更遑論 Ajax 的開發。
   一句話, Java 社區需要 Ajax ,需要它來提升基于 JavaEE 的 Web 應用的人機體驗;但是,人們并不喜歡 Ajax 目前的開發模式" title="開發模式">開發模式。無疑,我們需要一種新的解決方案。

誰來拯救 JavaEE 的 Ajax ?
  我給出的答案是 JSF 。目前,關于 JSF 的一種流行說法是“悲劇人生: Sun 讓 JSF 光著身子降臨到 Java Web 世界”。然而,我的看法卻是:作為一種革命性的服務器端組件技術, JSF 猶如早晨八九點鐘的太陽,前途不可限量。
  讓事實說話,我們先來看看 JSF 請求 / 響應過程的標準生命周期:

???

????????????1 JSF 的生命周期

??? 通過上圖可以觀察到,任何一個 JSF“Faces Request” 請求,經過 Restore View 、 Apply Request Values 、 Process Validations 、 Update Models 、 Invoke Application 等階段以后,產生了一個 “Render Response” 返回給客戶端" title="客戶端">客戶端。那么,常規 JSF 引擎是如何實現上述過程的呢?

??? ??
??? 回顧一下常規 JSF 引擎針對請求與響應的過程:首先,客戶端請求某個資源,產生一個 Faces Request ;服務器端接收到此請求以后,經過一系列后臺處理,產生一個 Faces Response 。我們注意到:響應的 Content-Type 是 text/html ,而產生的內容主體是一段 HTML 文本;瀏覽器在接收到 HTML 文本以后,進行整個頁面的渲染與刷新。

無需寫 Ajax 代碼的 Ajax Enabled 應用

????? 我用自己開發的 JSF 引擎,這樣處理上述過程(詳見參考資料" title="參考資料">參考資料 www.OperaMasks.org ),如下圖所示:

?
???????? 圖 3 OperaMasks JSF 實現的請求與響應過程

???? 首先可以觀察到, Faces Request 的發出是基于 “x-requested-by: XML Http Request” ,也就是說,這是一個 Ajax 請求,而該請求在到達服務器端以后,服務器端所產生的 Faces Response 同常規 Faces Response 相比也發生了變化: Content-Type 不再是 text/html ,變成了 text/javascript ;并且,響應的主體也不再是 html 文本,而是一堆 script 腳本。瀏覽器在接收到響應以后,再也不需要進行整個頁面的渲染與刷新,而只僅僅需要執行這段腳本內容,將頁面的控件進行更新即可。

????? 顯而易見,通過上述 JSF 技術,我們獲得了:
????? - 基于 Ajax 的請求、應答、及頁面控件的更新
????? - 數據傳輸量明顯減少
????? - 避免整個頁面的刷新,更好的用戶體驗
????? - 系統保持敏捷、高效
???? 換言之:任何標準 JSF 應用,只需將其在 OperaMasks JSF 引擎上運行,就可以達到這樣的效果。我們并沒有寫任何一行 Ajax 的代碼,但是,我們的應用卻是自然而然的 Ajax Enabled 的應用。大道至簡,大象無形。

奧妙所在: JSF 的 Render 機制

為什么可以這樣?
   JSF 組件只是特定狀態和行為的載體,而組件以什么形式去和用戶交互,是完全可定制的、獨立于該特定的表現語言,可以是 HTML 、 WML 或者其他形式;具體是什么,可以通過指定 JSF 組件的 Render Kit 來實現,而每一種 Render Kit ,對應于組件作者寫的同一風格和形式的一系列 Render 。
   比如,如果想在網頁中實現圖表功能( Chart) , MSIE 有 VML , Gecko 和 Opera 有 SVG ;而在服務器端只需要簡單地判斷一下瀏覽器類型,就可以選擇一個 Render Kit ,生成不同的客戶端表現來完成相同功能――這是用常規 JSP 技術很難完成的任務。
   通俗的說, JSF 組件可以翻譯成任何你想要的形式。 So , JSF 框架比現有其它開源框架具有更強的生命力。上文所述的 OperaMasks JSF ,其容器級別 Ajax 實現,正是靈活應用 Render Kit 的具體案例。

從容器級別對 Ajax 予以支持的 JSF 引擎

  我們提出的 JSF 是直接由 JSF 容器來處理 Ajax 請求的,它會根據請求類型來判斷這是一個正常 HTTP 請求還是一個 Ajax 請求:如果是常規 HTTP 請求就運行 JSP 頁面,生成頁面文檔(特定的,對于 Ajax Render kit ,要加入一些 Ajax 基礎 JavaScript 代碼);如果是 Ajax 請求,服務器對請求參數正常解碼,并執行 JSF 中除頁面輸出階段以外的所有其他階段,生成一個 JSF 組件樹。
   一直到這一步為止,處理方式與對普通 HTTP 請求的處理完全一致,唯一不同的是:在隨后 Render Response 階段,容器除了調用組件作者寫的 Ajax 功能 Renderer 以外,更重要的是在生成響應頁面時,會過濾掉一切不會變化的靜態內容――也就是說,靜態內容不會生成到響應頁面中去,而對每一個動態內容則會生成一個相應 JavaScript 代碼(可以更進一步優化為只有變化了的動態內容才處理)。這樣,傳給客戶的 Ajax 應答實際上是由這樣一些 JavaScript 語句構成。在 Ajax 響應返回到客戶端時,就可以自動由 Ajax 回調函數執行這些 JavaScript 語句,完成對頁面即時的、局部的更改,而不需要刷新整個頁面。依賴 JSF 組件的具體功能,甚至可以改變頁面的外觀。而整個 Ajax 機制由 JSF 引擎提供,對用戶完全透明。
   實際上,在 JSF 規范中 JSF 頁面輸出階段所采用的 Render Kit 是可替換的,默認的 HTML_BASIC Render Kit 輸出的是標準 HTML 語法,不包含任何 Java Script 代碼。我們提出的 JSF 引擎實現了一個 Ajax Render Kit ,可以在 HTML 文檔中嵌入 Java Script 代碼來實現 Ajax 特性,而替換 Render Kit 只需要修改配置文件即可。
   簡單地說,這種 JSF 引擎為每個標準組件都實現了相應的 Ajax Render , 比如對 UICommand 組件,其 Ajax Render 會在 onclick 事件中加入 JavaScript 的 Ajax 提交代碼,向服務器提交 Ajax 請求。通過這種方式,任何一個包含標準 JSF 組件的 Web 應用,都可以通過只更改 Render Kit 配置為 Ajax 來實現 Web 應用 Ajax 化。而對于第三方" title="第三方">第三方的組件,可能本身并不支持 Ajax ,但使用一個名為 的標簽,就可以立即將這個第三方組件轉換成 Ajax Enabled 。
   例如, Apache myfaces 的 Tomahawk 項目提供了一個 Tree 組件,這個組件本身并不支持 Ajax ,每當按下一個 Tree 結點都將重新刷新整個頁面。使用 標簽后,則只刷新 Tree 部分,而不刷新頁面的其他部分。當然更好的方式是,提供一個本身就支持 Ajax 的 Tree 組件,以減少冗余數據的傳遞。關于 標簽的原理,有興趣的讀者可以參考 OperaMasks JSF 的源碼(詳見參考資料),這里就不再一一贅述了。
   綜上, JavaEE 需要 Ajax ,但并不需要傳統的 Ajax 開發模式。通過我們提出的 OperaMasks JSF 技術,我們不再需要知道什么是 Ajax ,而我們的應用卻是自然而然的 Ajax Enabled 應用。
   因此,我們認為: JavaEE Without Ajax !

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          久久久精品久久久久| 午夜精品久久久久久久99水蜜桃| 欧美一区二区| 欧美国产一区二区在线观看| 国产热re99久久6国产精品| 欧美一级视频免费在线观看| 亚洲欧美日韩在线不卡| 国产九九精品| 欧美日韩和欧美的一区二区| 麻豆91精品91久久久的内涵| 欧美国产一区在线| 香蕉久久a毛片| 欧美91大片| 国产精品入口| 欧美视频免费在线| 精品成人一区二区三区| 欧美精品在线视频观看| 亚洲私拍自拍| 免费久久久一本精品久久区| 久久色中文字幕| 欧美国产日韩a欧美在线观看| 欧美午夜视频一区二区| 一区久久精品| 国产免费一区二区三区香蕉精| 久久精品在线播放| 久久精品盗摄| 亚洲欧洲精品天堂一级| 国产精品久久久久久妇女6080| 欧美成人免费全部观看天天性色| 亚洲大胆视频| 久久久久久久91| 国产精品激情av在线播放| 亚洲另类一区二区| 1769国内精品视频在线播放| 黄色精品一二区| 伊人狠狠色j香婷婷综合| 日韩一二三区视频| 亚洲性图久久| 美女国内精品自产拍在线播放| 欧美激情久久久久| 欧美视频中文字幕| 亚洲国产中文字幕在线观看| 国产日韩欧美综合| 国产精品揄拍500视频| 国产精品一区免费观看| 欧美成人a视频| 狂野欧美激情性xxxx欧美| 国产在线不卡精品| 亚洲欧美日本日韩| 欧美激情综合亚洲一二区| 久久青草福利网站| 9色精品在线| 国产精品久久福利| 亚洲精品一区在线观看香蕉| 久久精品青青大伊人av| 另类av导航| 久久精彩视频| 精品动漫一区二区| 亚洲私人影院| 久久精品欧美| 久久午夜色播影院免费高清| 在线精品高清中文字幕| 亚洲综合999| 亚洲欧美日韩电影| 99视频精品全部免费在线| 国产精品亚洲综合色区韩国| 久久精品亚洲乱码伦伦中文| 午夜性色一区二区三区免费视频| 国产亚洲一区二区三区在线播放| 欧美伦理影院| 欧美在线精品免播放器视频| 亚洲一区免费视频| 国产视频一区二区在线观看| 国产欧美日韩麻豆91| 国产伦理精品不卡| 欧美jizzhd精品欧美巨大免费| 欧美日韩在线综合| 一区二区三区高清视频在线观看| 亚洲欧美日韩一区二区在线| 国产午夜精品一区二区三区视频| 国产一区二区日韩| 亚洲第一天堂av| 国产麻豆日韩欧美久久| 免费人成网站在线观看欧美高清| 亚洲欧美日韩一区二区三区在线| 国产精品美女久久久免费| 中日韩在线视频| 久久精品视频免费观看| 午夜一区二区三视频在线观看| 久久久av网站| 在线精品在线| 欧美二区乱c少妇| 国产伦精品一区二区三区免费| 亚洲小说欧美另类婷婷| 亚洲欧洲日本在线| 国产麻豆精品在线观看| 久久国产视频网| 亚洲国产另类久久精品| 国产精品久久国产愉拍| 欧美三级中文字幕在线观看| 久久久久国产精品厨房| 中文亚洲欧美| 久久精品国产亚洲a| 亚洲人成人77777线观看| 亚洲精品韩国| 国产欧美一区二区精品忘忧草| 欧美日韩一区二区视频在线| 国产农村妇女毛片精品久久麻豆| 好吊色欧美一区二区三区视频| 国产日韩欧美自拍| 亚洲欧美日韩在线综合| 欧美精品在线观看播放| 国产日韩高清一区二区三区在线| 亚洲精品久久在线| 国产亚洲一级高清| 在线观看视频免费一区二区三区| 亚洲精品影视| 麻豆成人小视频| 久久久久国产免费免费| 一区二区电影免费在线观看| 小黄鸭视频精品导航| 亚洲人成亚洲人成在线观看图片| 欧美中文字幕不卡| 影音先锋亚洲电影| 亚洲国产日韩在线| 欧美超级免费视 在线| 国产嫩草影院久久久久| 久久久久久**毛片大全| 欧美a级片网站| 在线亚洲欧美专区二区| 亚洲欧美日韩中文播放| 欧美 日韩 国产精品免费观看| 亚洲视频在线一区| 亚洲美女精品成人在线视频| 欧美日韩精品是欧美日韩精品| 欧美亚洲视频| 国产精品欧美经典| 国产欧美精品日韩精品| 久久久噜噜噜久久中文字幕色伊伊| 国产精品爽爽爽| 国产精品大片免费观看| 欧美freesex交免费视频| 在线电影欧美日韩一区二区私密| 久久综合伊人77777尤物| 亚洲欧美激情视频在线观看一区二区三区| 国产精品日本一区二区| 亚洲国产精品久久久久秋霞蜜臀| 宅男在线国产精品| 亚洲日韩欧美视频| 国产精品视频一二三| 亚洲电影在线免费观看| 精品96久久久久久中文字幕无| 亚洲精品国产精品久久清纯直播| 国产伦精品一区二区| 性欧美1819性猛交| 国产精品久久99| 玖玖视频精品| 欧美日韩第一区日日骚| 久久成人羞羞网站| 一个色综合导航| 欧美黑人一区二区三区| 国产精品亚洲综合天堂夜夜| 国产精品激情| 国产精品成人一区二区| 国产精品美女一区二区在线观看| 久久久久久久高潮| 午夜欧美理论片| 国产精品综合不卡av| 国内精品久久久久影院优| 国产精品久久二区| 一本一本a久久| 久久久免费av| 日韩一级黄色大片| 国产一区二区三区四区三区四| 欧美中文在线观看| 亚洲日本在线视频观看| 一区二区三区 在线观看视频| 韩日视频一区| 在线观看91精品国产入口| 午夜精品一区二区三区在线| 午夜精品久久久久久久99樱桃| 99在线观看免费视频精品观看| 欧美成人精品一区| 欧美成人综合在线| 久久精品国产免费观看| 在线色欧美三级视频| 国产欧美日韩精品a在线观看| 亚洲欧洲一区二区在线观看| 国产酒店精品激情| 亚洲福利国产| 国产在线播放一区二区三区| 国产精品一区在线观看| 国产精品久久久久久久午夜| 欧美视频中文一区二区三区在线观看| 久久都是精品| 久久久久久久综合狠狠综合| 亚洲精品久久久久| 午夜精品视频网站| 欧美极品一区二区三区| 亚洲专区欧美专区| 久久婷婷av| 99爱精品视频| 一区二区三区欧美激情| 亚洲一区二区欧美| 国产精品日韩在线播放| 欧美日韩国产成人精品| 亚洲国产精品成人精品| 亚洲美女免费视频| 欧美11—12娇小xxxx| 日韩一级二级三级| 国产精品国产成人国产三级| 亚洲欧美视频在线| 亚洲伊人久久综合| 欧美一区二区三区精品| 亚洲一区二区三区精品在线观看| 久久精品视频在线看| 久久蜜桃香蕉精品一区二区三区| 性久久久久久久久久久久| 亚洲欧洲一区二区在线观看| 久久久蜜臀国产一区二区| 欧美日韩亚洲高清一区二区| 亚洲国产精品一区制服丝袜| 午夜天堂精品久久久久| 欧美高清影院| 亚洲国内欧美| 亚洲精品久久视频| 日韩视频免费大全中文字幕| 亚洲黄色性网站| 午夜精品视频一区| 亚洲欧美综合国产精品一区| 亚洲一区二区三区影院| 1000精品久久久久久久久| 亚洲一区久久久| 亚洲影院在线| 欧美精品在欧美一区二区少妇| 老司机67194精品线观看| 一区二区三区在线视频免费观看| 尤物精品国产第一福利三区| 韩国成人福利片在线播放| 羞羞色国产精品| 宅男噜噜噜66一区二区66| 久久国内精品视频| 久久人人爽爽爽人久久久| 精品av久久久久电影| 国产一级久久| 性色av一区二区三区| 国产精品欧美激情| 亚洲乱码视频| 午夜精品亚洲一区二区三区嫩草| 9国产精品视频| 欧美一区二区三区免费观看| 国产日产亚洲精品系列| 狠狠v欧美v日韩v亚洲ⅴ| 最新亚洲视频| 韩国自拍一区| 久久精品日韩欧美| 亚洲精品亚洲人成人网| aa日韩免费精品视频一| 免费观看成人鲁鲁鲁鲁鲁视频| 久久综合伊人77777尤物| 国产伦精品一区二区三区四区免费| 国产精品日韩在线播放| 欧美大片18| 一本久道久久综合中文字幕| 亚洲美女啪啪| 欧美日韩美女在线| 欧美激情精品久久久久久免费印度| 国产日本欧洲亚洲| 久久久久久**毛片大全| 免费观看日韩av| 欧美视频免费看| 性做久久久久久免费观看欧美| 国产日韩精品在线播放| 欧美日韩日日骚| 国产美女诱惑一区二区| 欧美日韩在线精品一区二区三区| 榴莲视频成人在线观看| 亚洲人成在线观看网站高清| 在线视频你懂得一区二区三区| 午夜精品一区二区三区在线视| 欧美激情一区二区三区蜜桃视频| 久久国产福利| 国产日韩一区欧美| 美女诱惑黄网站一区| 国模私拍一区二区三区| 开元免费观看欧美电视剧网站| 久久久午夜电影| 亚洲在线一区二区| 99国产精品久久久| 久久亚洲电影| 一区二区日本视频| 国产偷国产偷精品高清尤物| 亚洲国产精品久久久久婷婷884| 日韩视频久久| 国内外成人免费激情在线视频网站| 国产精品自在欧美一区| 亚洲一区二区在线观看视频| 在线观看一区二区精品视频| 久久精品国产69国产精品亚洲| 国产精品xxx在线观看www| 欧美顶级艳妇交换群宴| 99国产欧美久久久精品| 中日韩午夜理伦电影免费| 亚洲美女在线看| 欧美日韩国产经典色站一区二区三区| 噜噜噜噜噜久久久久久91| 宅男精品视频| 亚洲精品美女久久7777777| 久久青青草原一区二区| 日韩小视频在线观看专区| 国产精品乱码久久久久久| 亚洲一区二区免费看| 一区免费在线| 亚洲新中文字幕| 久久久成人网| 欧美精品色一区二区三区| 亚洲一区精品在线| 国产综合久久| 欧美精品国产精品日韩精品| 一区二区久久| 99亚洲一区二区| 精品白丝av| 国产欧美精品一区二区三区介绍| 午夜在线不卡| 亚洲人成在线影院| 亚洲欧美国产精品桃花| 欧美一级大片在线免费观看| 国产九色精品成人porny|