WebWork是一個(gè)Java web-application開發(fā)框架(development framework). 它專注于提高開發(fā)者的生產(chǎn)效率并簡化代碼. WebWork構(gòu)建在XWork之上.
WebWork是由OpenSymphony組織開發(fā)的,致力于組件化和代碼重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.2,現(xiàn)在的WebWork2.x前身是Rickard Oberg開發(fā)的WebWork,但現(xiàn)在WebWork已經(jīng)被拆分成了Xwork1和WebWork2兩個(gè)項(xiàng)目。Xwork簡潔、靈活功能強(qiáng)大,它是一個(gè)標(biāo)準(zhǔn)的Command模式實(shí)現(xiàn),并且完全從web層脫離出來。Xwork提供了很多核心功能:前端攔截機(jī)(interceptor),運(yùn)行時(shí)表單屬性驗(yàn)證,類型轉(zhuǎn)換,強(qiáng)大的表達(dá)式語言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。
WebWork2建立在Xwork之上,處理HTTP的響應(yīng)和請(qǐng)求。WebWork2使用ServletDispatcher將HTTP請(qǐng)求的變成Action(業(yè)務(wù)層Action類), session(會(huì)話)application(應(yīng)用程序)范圍的映射,request請(qǐng)求參數(shù)映射。WebWork2支持多視圖表示,視圖部分可以使用JSP, Velocity, FreeMarker, JasperReports,XML等
1 XWork提供了普通的(generic)命令模式(command pattern)框架
2 同時(shí)也是一個(gè)反轉(zhuǎn)控制(Inversion of Control, IoC)容器.
除了上述特性外, WebWork還為其它功能如
1 創(chuàng)建可復(fù)用的用戶界面模版(UI template)
2 表單(form)控制
3 用戶界面主題(UI theme)
4 國際化
5 表單參數(shù)與JavaBean的動(dòng)態(tài)映射
6 健壯的客戶端及服務(wù)器端校驗(yàn)(validation)
提供了強(qiáng)有力的支持.
WebWork 2 : 什么是WebWork
WebWork是一個(gè)強(qiáng)大的基于Web的MVC框架, 它構(gòu)建在一個(gè)命令模式框架XWork之上. WebWork的特性包括
1 :用于處理或代理 請(qǐng)求的分發(fā)器(Dispatcher)
2 :支持多種視圖技術(shù)(JSP, Velocity, JasperReports, XML, FreeMarker)的結(jié)果類型
3 :一個(gè)小而強(qiáng)大的JSP標(biāo)簽庫和Velocity宏定義
4 :分發(fā)器調(diào)用XWork活動(dòng)來訪問和操作模型(Model)并為視圖顯示模型數(shù)據(jù)提供方便的途徑.
WebWork真正的優(yōu)勢(shì)在于它強(qiáng)調(diào)簡潔和協(xié)作能力的根本理念. 使用WebWork將有助于
1 :最小化代碼
2 :允許開發(fā)人員更多的關(guān)注業(yè)務(wù)邏輯(business logic)和建模(modeling)
3 :不是諸如編寫Servlet之類的事情.
一 :特性
1 :靈活的校驗(yàn)(validation)框架, 允許使用XML文件定義校驗(yàn)并通過截取器(Interceptor)在運(yùn)行時(shí)自動(dòng)應(yīng)用到活動(dòng)類(Action class), 從而達(dá)到校驗(yàn)與活動(dòng)類之間的完全解藕(decoupled). 新版本還支持客戶端校驗(yàn).
2 :類型轉(zhuǎn)化(Type conversion)可以很容易的將對(duì)象從一個(gè)類轉(zhuǎn)換成另一個(gè)類型。
3 :強(qiáng)大的表達(dá)式語言(Expression Language, EL)建立在OGNL基礎(chǔ)之上, 允許:
1 遍歷動(dòng)態(tài)對(duì)象圖
2 執(zhí)行對(duì)象方法
3 使用值棧(ValueStack)實(shí)現(xiàn)對(duì)多個(gè)JavaBean屬性的透明訪問
4 Webwork也可以使用JSTL.
4 :使用反轉(zhuǎn)控制(Inversion of Control, IoC)管理組件(component)生命周期和依賴關(guān)系, 不需要編寫注冊(cè)類創(chuàng)建組件, 組件客戶也不需要主動(dòng)獲取組件實(shí)例(instance).
5 :Velocity模版, 使得開發(fā)人員可以很容易的定制Web頁面的外觀(look & feel).
6 :截取器(Interceptors)可以動(dòng)態(tài)截取活動(dòng)(Action)執(zhí)行前后的處理過程, 這
1 簡化了活動(dòng)的代碼
2 提高了代碼復(fù)用能力
7 :支持國際化(I18n).
8 :可以方便的與其他第三方軟件集成, 包括Hibernate, Spring, Pico, Sitemesh.
9 :支持多種視圖技術(shù)如:
1 JSP
2 Velocity
3 FreeMarker
4 JasperReports
5 XML
10 :使用包(Packages)和名空間(Namespaces)管理數(shù)以百計(jì)的活動(dòng).
二 :背景與目的
WebWork是一個(gè)開放源代碼項(xiàng)目, 目標(biāo)是為在短時(shí)間內(nèi)構(gòu)建復(fù)雜網(wǎng)站提供易于理解和維護(hù)的工具及開發(fā)框架. Java是一個(gè)平臺(tái)以及基于該平臺(tái)的語言, 盡管他支持although it supports many others as the language in which systems are built, such as JavaScript and XML.
WebWork在構(gòu)架上基于最佳實(shí)踐和那些已被證實(shí)有價(jià)值的設(shè)計(jì)模式. 它還基于一個(gè)強(qiáng)烈的動(dòng)機(jī): 盡可能的簡單, 并具有維護(hù)上的靈活性(這實(shí)際上是一個(gè)困難的平衡).
它也鼓勵(lì)用戶使用恰當(dāng)?shù)?span lang=EN-US>, 符合需要的方式工作. [It also encourages you, as a user, to do things the way you seem fit for your needs.] WebWork能以多種方式配置和使用, 哪種方式更適合于你依賴于使用環(huán)境. 下面是一個(gè)例子, WebWork支持多種不同的HTML生成技術(shù)如:
1 JSP
2 Velocity模版引擎
3 XSLT
它們之間在理念上和技術(shù)上都存在很大的差別, 但都能為WebWork所用, 同時(shí), 不同的用戶確實(shí)需要這些不同的方式. "你不能那么做"是我們盡可能避免的一句話, 而"我們不能"往往是因?yàn)橛辛硪粋€(gè)更好, 更適合的工具.
三 :WebWork對(duì)MVC Model-1和Model-2的支持
Web應(yīng)用開發(fā)框架的最重要的一個(gè)任務(wù)是支持
1 邏輯
2 內(nèi)容
3 表現(xiàn)
相分離的理念. 如果沒有做到這一點(diǎn), 通常會(huì)導(dǎo)致維護(hù)上的問題, 如果開發(fā)團(tuán)隊(duì)結(jié)構(gòu)復(fù)雜(因?yàn)槊恳粋€(gè)團(tuán)隊(duì)成員通常只負(fù)責(zé)應(yīng)用的某一方面(aspect)), 還會(huì)使應(yīng)用的開發(fā)變得更加困難. 達(dá)到分離目的的一般方法是采用MVC(Model-View-Controller)設(shè)計(jì)模式. 該模式鼓勵(lì)使用分離的代碼來處理:
1 模型(model, 即 " 業(yè)務(wù)邏輯 " )
2 控制器(controller, 即 " 應(yīng)用邏輯 " )
3 視圖(view).
這樣分離之后, 下一個(gè)問題是:
控制器的代碼與表現(xiàn)部分如何交互
有兩種常用的設(shè)計(jì)模型可以做到這一點(diǎn), 它們分別被稱為Model-1和Model-2. 這兩種模型將在下文描述.
Model-1 :
Model-1方式的基本想法是在表示層(presentation layer)如JSP或模版中調(diào)用控制器代碼. 如果你正在使用JSP, 這意味著你可以通過兩種方式執(zhí)行你的WebWork活動(dòng):
1 使用 " webwork:action " 標(biāo)簽調(diào)用執(zhí)行
2 使用 " webwork:bean " 標(biāo)簽像調(diào)用JavaBeans一樣執(zhí)行活動(dòng).
Model-2 :
在Model-2方式中
1 哪些代碼調(diào)用控制器
2 哪些視圖進(jìn)行展示
由第三方?jīng)Q定, 通常是一個(gè)servlet分發(fā)器. 分發(fā)器解碼HTTP請(qǐng)求中的URL, 然后決定執(zhí)行哪些代碼. 一個(gè)包含控制器代碼的Java對(duì)象被獲取并執(zhí)行, 從而完成對(duì)某個(gè)應(yīng)用邏輯和業(yè)務(wù)邏輯的處理. 當(dāng)執(zhí)行結(jié)束后, 分發(fā)器將請(qǐng)求轉(zhuǎn)交(forward)給一個(gè)視圖處理器(如一個(gè)JSP), 它使用前一個(gè)處理的數(shù)據(jù)繪制結(jié)果視圖.
四 :如何選擇使用?
由于
1 控制器邏輯
2 表現(xiàn)生成
完全解藕, 使得根據(jù)執(zhí)行情況來顯示不同結(jié)果頁面成為可能. 例如, 如果處理出現(xiàn)錯(cuò)誤就可以顯示一個(gè)錯(cuò)誤頁面而不顯示正常的結(jié)果頁面.
Model-1方式的優(yōu)點(diǎn)如下.
1 :不需要建立代碼與表示之間的映射關(guān)系.
2 :易于察看JSP或模版中執(zhí)行了哪些代碼.
3 :如果頁面中的一部分要求某個(gè)處理過程只允許成功(否則系統(tǒng)失靈),
那么這些代碼調(diào)用和表現(xiàn)部分的代碼(如JSP標(biāo)簽庫和HTML)不必分離到新的活動(dòng)和JSP頁面中處理過程. 這樣可以提高性能和可讀性.
Model-2方式的優(yōu)點(diǎn)如下.
1 :代碼和表現(xiàn)徹底分離. 同一個(gè)表現(xiàn)頁面可以被多個(gè)不同的活動(dòng)復(fù)用,
這些活動(dòng)可以訪問不同的數(shù)據(jù)但使用相同的方式展示.
2 :如果一個(gè)活動(dòng)可能導(dǎo)致多種狀態(tài), 如 " 成功 " , " 需要重新輸入 " , 或 " 出現(xiàn)錯(cuò)誤 " ,
那么使用Model - 2方式可以很容易的將這些狀態(tài)映射到不同的頁面.
選擇使用的首要原則是:
當(dāng)代碼僅僅是獲取并顯示數(shù)據(jù)(這被稱為read - type code)時(shí)使用Model - 1
只要當(dāng)模型是由活動(dòng)或一個(gè)處理流程所改變時(shí)就應(yīng)當(dāng)使用Model - 2 .
OGNL是WebWork,XWork中的底層支持組件.非常強(qiáng)大的函數(shù)庫.