Posted on 2007-08-03 09:55
puras 閱讀(1205)
評論(2) 編輯 收藏 所屬分類:
Struts2.0
現今的開發者有許多不同的WEB框架可用.其中一些是來自開源的團體,一些則來自商業公司,還有一些為了當前WEB發展的需要而正在開發的.現在有超過400個開源框架,雖然這是一個大數目,但還有很多內部使用的框架部署在生產環境中.
所有,有很多的選擇,為什么要選擇Struts2? 這有一些特征也許會吸引你使用Struts2:
- 基于Action的框架
- 成熟與蓬勃發展和用戶社區
- 注釋和XML配置選項
- 基于POJO的Action,非常容易測試
- 集成Spring, SiteMesh和Tiles
- 集成OGNL表達式語言
- 基于主題的標簽庫和Ajax標簽
- 多種視圖選選擇(JSP,Freemarker,Velocity和XSLT)
- 插件擴展和修改框架的特征
所有的為了選擇一個框架,選擇一個風格框架的決定,都是頗具爭議的.我們來看現在Web應用的選擇,了解Struts可以應用在哪些方面.
Servlets
Servlets提供了第一個基于Java的WEB開發方法.在HTTP協議下,servlets提供了一種映射URL到調用特定的類的方法.
很快它就被驗證,雖然這是一個很大的進步,但在Java代碼中生成HTML代碼,維護起來簡直是個惡夢.每當一個簡單的用戶接口需要更改,Java程序員則需要修改Servlet代碼,重新編譯這些源碼,并將其發布到應用所在的服務器環境中.
JSP and Scriptlet Development
"維護惡夢"的結果,就是將發展的結果顛倒了.比起將HTML代碼放置在Servlet或是Java代碼中,將Java代碼放HTML代碼中(JSP)則會更好一些.每個JSP里包含請求的邏輯處理和展示邏輯.
一個問題解決了,但另一個問題又引進來了.Java代碼是在類文件中的,然而,這里卻沒有方法或類的結構.看看早期的JSP文件,你會發現兩個現像:
- 拷貝和粘貼代碼:從一個JSP文件中拷貝Java到其他的JSP文件中.從原始的代碼中傳播出來的缺陷和錯誤,增加大量的工作量,需要同時對所有的文件做出修改.
- 調用公用的Java格式化對象:公用的格式化或邏輯代碼組成一個可復用的對象.然后JSP使用公用對象.從這些中發現了最佳的實踐模式--從JSPs中使用Java對象.
做為JSP規范的發展,標簽被引進入來,用于復用Java對象.Tag提供一個類似于HTML的寫法來訪問底層的代碼,允許設計者(而非開發者)利用IDEs使用動態標簽編輯網布的布局.例如JSP提供的<jsp:useBean.../>和<jsp:getProperty.../>標簽.隨同提供JSP標簽庫一起,JSPs提供了一個讓開發人員創建自己的標簽庫的方法.
Action-Based Frameworks
基于Action的框架,是在結合了Servlets和JSPs兩者的概念之上.想法是拆分用戶發送的請求的頁面的請求處理和顯示邏輯,讓每個部分都做它做的最好的一塊.這個實現使用一個來自Smalltalk的模式,MVC模式,或是更多常說的前端控制器,或是Sun說法中的Model2.
在這個模式中,Servlet是一個控制器,提供一個對所有客戶端頁面請求的集中的控制點.它映射請求的URL到工作單元中的一個action.這個action的工作則將對給定的URL執行特定的方法, 訪問HTTPsession, HTTP請求和參數,調用商業服務,并將響應映射到一個Model中,一般使用POJO.最后,action返回一個結果,映射(通過配置文件)到JSP來瀉染視圖.
Struts2是一個基于action的MVC的WEB框架.
Component-Based Frameworks
由于WEB應用變得越來越復雜,人們認識到一個頁面不再是將邏輯分離,WEB應用了多種頁面形式,鏈接內容更新和其他許多自義定的窗口小部件--所有的都需要處理邏輯以實現他們的任務.
為了解決這些復雜性,基于組件的框架變得開始受歡迎.它們提供了一種封閉的由用戶界面組件和類的組件,并且是由事件驅動的,而且比基于action的框架更加面向對象.一個組件可以是一個HTML輸入框,一個HTML的窗體或是提供的自定義窗口小部件.事件,像窗體的提交或鏈接這種,映射到描述組件的類的方法,或到特定的監聽類.另一個好處是基于組件的框架,允許你方便的復用你的組件在多個WEB應用中.基于組件的框架有JSF,Wicket和Tapestry等.
The Great Equalizer – Ajax
在2005年初,一種新的魔力出現在WEB開發中.Jesse James Garrett杜撰的,AJAX代表"Asynchronous JavaScript and XML".相對來說,技術并不新鮮.事實上,主要的WEB瀏覽組件已經創建了這個異步調用--XMLHttpRequest對象, 早在6年前就已經可用了.
但是有什么新應用使用了這項技術呢.Google Maps是最早充分利用這項技術的應用.網頁活躍了起來--您能與控制和裝飾物交互.使用鼠標你可以在屏幕內滾動地圖;當輸入一個地址時,信息將在地圖上被物化出來;最后,the culmination being route planning which orchestrated all these features into a useable web application.并且,所有這些,都沒有發生整個頁面的刷新.
用戶界面使用Ajax功能允許WEB瀏覽器對服務器的請求使用更小的信息量,并且只有它被需要的時候.請求結果被服務器格式化或操作,并直接返回給頁面顯示,使用WEB瀏覽器將變化傳遞給用戶.只有頁面的部分被更新,而不是整個頁面,使用戶覺得這個WEB應用可以更快的響應他們的操作.
從UI來的請求,類似事件--它們非常的分散,為一個單獨的組件或方法傳遞信息.不再需要一個action為整個頁面檢索數據,它們 更加簡潔,而且因此更方便在各個應用中復用.實際上,一個Ajax用戶界面調用基于action的框架允許action框架的行為與基于組件的框架相似.事實上,這種技術的組合提供了更加松耦合和可復用性更加的系統.同樣的actions可以為Ajax組件提供JSON,XML或HTML的視圖片段,和其他actions結合提供非Ajax用戶界面的HTML視圖相似.
上一章:Starting Struts2--緒論
下一章:Starting Struts2--Core Components(1)