關于WebWork的認識與思考
WebWork是一個Java web-application開發框架(development framework). 它專注于提高開發者的生產效率并簡化代碼. WebWork構建在XWork之上.
WebWork是由OpenSymphony組織開發的,致力于組件化和代碼重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.2,現在的WebWork2.x前身是Rickard Oberg開發的WebWork,但現在WebWork已經被拆分成了Xwork1和WebWork2兩個項目。Xwork簡潔、靈活功能強大,它是一個標準的Command模式實現,并且完全從web層脫離出來。Xwork提供了很多核心功能:前端攔截機(interceptor),運行時表單屬性驗證,類型轉換,強大的表達式語言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。
WebWork2建立在Xwork之上,處理HTTP的響應和請求。WebWork2使用ServletDispatcher將HTTP請求的變成Action(業務層Action類), session(會話)application(應用程序)范圍的映射,request請求參數映射。WebWork2支持多視圖表示,視圖部分可以使用JSP, Velocity, FreeMarker, JasperReports,XML等
1
2
除了上述特性外, WebWork還為其它功能如
1
2
3
4
5
6
提供了強有力的支持.
WebWork 2 : 什么是WebWork
WebWork是一個強大的基于Web的MVC框架, 它構建在一個命令模式框架XWork之上. WebWork的特性包括
WebWork真正的優勢在于它強調簡潔和協作能力的根本理念. 使用WebWork將有助于
一 :特性
1 :靈活的校驗(validation)框架, 允許使用XML文件定義校驗并通過截取器(Interceptor)在運行時自動應用到活動類(Action class), 從而達到校驗與活動類之間的完全解藕(decoupled). 新版本還支持客戶端校驗.
2 :類型轉化(Type conversion)可以很容易的將對象從一個類轉換成另一個類型。
3 :強大的表達式語言(Expression Language, EL)建立在OGNL基礎之上, 允許:
1
2
3
4
4 :使用反轉控制(Inversion of Control, IoC)管理組件(component)生命周期和依賴關系, 不需要編寫注冊類創建組件, 組件客戶也不需要主動獲取組件實例(instance).
5 :Velocity模版, 使得開發人員可以很容易的定制Web頁面的外觀(look & feel).
6 :截取器(Interceptors)可以動態截取活動(Action)執行前后的處理過程, 這
1
2
7 :支持國際化(I18n).
8 :可以方便的與其他第三方軟件集成, 包括Hibernate, Spring, Pico, Sitemesh.
9 :支持多種視圖技術如:
1
2
3
4
5
10 :使用包(Packages)和名空間(Namespaces)管理數以百計的活動.
二 :背景與目的
WebWork是一個開放源代碼項目, 目標是為在短時間內構建復雜網站提供易于理解和維護的工具及開發框架. Java是一個平臺以及基于該平臺的語言, 盡管他支持although it supports many others as the language in which systems are built, such as JavaScript and XML.
WebWork在構架上基于最佳實踐和那些已被證實有價值的設計模式. 它還基于一個強烈的動機: 盡可能的簡單, 并具有維護上的靈活性(這實際上是一個困難的平衡).
它也鼓勵用戶使用恰當的, 符合需要的方式工作. [It also encourages you, as a user, to do things the way you seem fit for your needs.] WebWork能以多種方式配置和使用, 哪種方式更適合于你依賴于使用環境. 下面是一個例子, WebWork支持多種不同的HTML生成技術如:
1
2
3
它們之間在理念上和技術上都存在很大的差別, 但都能為WebWork所用, 同時, 不同的用戶確實需要這些不同的方式. "你不能那么做"是我們盡可能避免的一句話, 而"我們不能"往往是因為有另一個更好, 更適合的工具.
三 :WebWork對MVC Model-1和Model-2的支持
Web應用開發框架的最重要的一個任務是支持
1
2
3
相分離的理念. 如果沒有做到這一點, 通常會導致維護上的問題, 如果開發團隊結構復雜(因為每一個團隊成員通常只負責應用的某一方面(aspect)), 還會使應用的開發變得更加困難. 達到分離目的的一般方法是采用MVC(Model-View-Controller)設計模式. 該模式鼓勵使用分離的代碼來處理:
1
2
3
這樣分離之后, 下一個問題是:
有兩種常用的設計模型可以做到這一點, 它們分別被稱為Model-1和Model-2. 這兩種模型將在下文描述.
Model-1 :
Model-1方式的基本想法是在表示層(presentation layer)如JSP或模版中調用控制器代碼. 如果你正在使用JSP, 這意味著你可以通過兩種方式執行你的WebWork活動:
1
2
Model-2 :
在Model-2方式中
1
2
由第三方決定, 通常是一個servlet分發器. 分發器解碼HTTP請求中的URL, 然后決定執行哪些代碼. 一個包含控制器代碼的Java對象被獲取并執行, 從而完成對某個應用邏輯和業務邏輯的處理. 當執行結束后, 分發器將請求轉交(forward)給一個視圖處理器(如一個JSP), 它使用前一個處理的數據繪制結果視圖.
四 :如何選擇使用?
由于
1
2
完全解藕, 使得根據執行情況來顯示不同結果頁面成為可能. 例如, 如果處理出現錯誤就可以顯示一個錯誤頁面而不顯示正常的結果頁面.
Model-1方式的優點如下.
那么這些代碼調用和表現部分的代碼(如JSP標簽庫和HTML)不必分離到新的活動和JSP頁面中處理過程. 這樣可以提高性能和可讀性.
Model-2方式的優點如下.
選擇使用的首要原則是:
OGNL是WebWork,XWork中的底層支持組件.非常強大的函數庫.