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 XWork提供了普通的(generic)命令模式(command pattern)框架
2 同時也是一個反轉控制(Inversion of Control, IoC)容器.
除了上述特性外, WebWork還為其它功能如
1 創建可復用的用戶界面模版(UI template)
2 表單(form)控制
3 用戶界面主題(UI theme)
4 國際化
5 表單參數與JavaBean的動態映射
6 健壯的客戶端及服務器端校驗(validation)
提供了強有力的支持.
WebWork 2 : 什么是WebWork
WebWork是一個強大的基于Web的MVC框架, 它構建在一個命令模式框架XWork之上. WebWork的特性包括
1 :用于處理或代理 請求的分發器(Dispatcher)
2 :支持多種視圖技術(JSP, Velocity, JasperReports, XML, FreeMarker)的結果類型
3 :一個小而強大的JSP標簽庫和Velocity宏定義
4 :分發器調用XWork活動來訪問和操作模型(Model)并為視圖顯示模型數據提供方便的途徑.
WebWork真正的優勢在于它強調簡潔和協作能力的根本理念. 使用WebWork將有助于
1 :最小化代碼
2 :允許開發人員更多的關注業務邏輯(business logic)和建模(modeling)
3 :不是諸如編寫Servlet之類的事情.
一 :特性
1 :靈活的校驗(validation)框架, 允許使用XML文件定義校驗并通過截取器(Interceptor)在運行時自動應用到活動類(Action class), 從而達到校驗與活動類之間的完全解藕(decoupled). 新版本還支持客戶端校驗.
2 :類型轉化(Type conversion)可以很容易的將對象從一個類轉換成另一個類型。
3 :強大的表達式語言(Expression Language, EL)建立在OGNL基礎之上, 允許:
1 遍歷動態對象圖
2 執行對象方法
3 使用值棧(ValueStack)實現對多個JavaBean屬性的透明訪問
4 Webwork也可以使用JSTL.
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 JSP
2 Velocity
3 FreeMarker
4 JasperReports
5 XML
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 JSP
2 Velocity模版引擎
3 XSLT
它們之間在理念上和技術上都存在很大的差別, 但都能為WebWork所用, 同時, 不同的用戶確實需要這些不同的方式. "你不能那么做"是我們盡可能避免的一句話, 而"我們不能"往往是因為有另一個更好, 更適合的工具.
三 :WebWork對MVC Model-1和Model-2的支持
Web應用開發框架的最重要的一個任務是支持
1 邏輯
2 內容
3 表現
相分離的理念. 如果沒有做到這一點, 通常會導致維護上的問題, 如果開發團隊結構復雜(因為每一個團隊成員通常只負責應用的某一方面(aspect)), 還會使應用的開發變得更加困難. 達到分離目的的一般方法是采用MVC(Model-View-Controller)設計模式. 該模式鼓勵使用分離的代碼來處理:
1 模型(model, 即 " 業務邏輯 " )
2 控制器(controller, 即 " 應用邏輯 " )
3 視圖(view).
這樣分離之后, 下一個問題是:
控制器的代碼與表現部分如何交互
有兩種常用的設計模型可以做到這一點, 它們分別被稱為Model-1和Model-2. 這兩種模型將在下文描述.
Model-1 :
Model-1方式的基本想法是在表示層(presentation layer)如JSP或模版中調用控制器代碼. 如果你正在使用JSP, 這意味著你可以通過兩種方式執行你的WebWork活動:
1 使用 " webwork:action " 標簽調用執行
2 使用 " webwork:bean " 標簽像調用JavaBeans一樣執行活動.
Model-2 :
在Model-2方式中
1 哪些代碼調用控制器
2 哪些視圖進行展示
由第三方決定, 通常是一個servlet分發器. 分發器解碼HTTP請求中的URL, 然后決定執行哪些代碼. 一個包含控制器代碼的Java對象被獲取并執行, 從而完成對某個應用邏輯和業務邏輯的處理. 當執行結束后, 分發器將請求轉交(forward)給一個視圖處理器(如一個JSP), 它使用前一個處理的數據繪制結果視圖.
四 :如何選擇使用?
由于
1 控制器邏輯
2 表現生成
完全解藕, 使得根據執行情況來顯示不同結果頁面成為可能. 例如, 如果處理出現錯誤就可以顯示一個錯誤頁面而不顯示正常的結果頁面.
Model-1方式的優點如下.
1 :不需要建立代碼與表示之間的映射關系.
2 :易于察看JSP或模版中執行了哪些代碼.
3 :如果頁面中的一部分要求某個處理過程只允許成功(否則系統失靈),
那么這些代碼調用和表現部分的代碼(如JSP標簽庫和HTML)不必分離到新的活動和JSP頁面中處理過程. 這樣可以提高性能和可讀性.
Model-2方式的優點如下.
1 :代碼和表現徹底分離. 同一個表現頁面可以被多個不同的活動復用,
這些活動可以訪問不同的數據但使用相同的方式展示.
2 :如果一個活動可能導致多種狀態, 如 " 成功 " , " 需要重新輸入 " , 或 " 出現錯誤 " ,
那么使用Model - 2方式可以很容易的將這些狀態映射到不同的頁面.
選擇使用的首要原則是:
當代碼僅僅是獲取并顯示數據(這被稱為read - type code)時使用Model - 1
只要當模型是由活動或一個處理流程所改變時就應當使用Model - 2 .
OGNL是WebWork,XWork中的底層支持組件.非常強大的函數庫.