WebWork深入淺出

來源:互聯網
上載者:User

  前言

本篇文章並沒有太多WebWork 的實戰代碼細節。本人非常希望能充當一名導遊的角色,帶領讀者逐步遊覽WebWork的功能特性和原理。在第一章,我們將提出基於三層架構的Web層需要解決的10個問題,這是本文的縱軸。圍繞著縱軸,我們按照橫軸的順序逐步描述講解:WebWork簡介、WebWork入門、WebWork原理、WebWork實戰和技巧、展望WebWork未來、最後是本文的總結。 基於三層架構的 Web 層需要解決的問題

我們這裡討論的Web層,是基於典型的三層架構:Web層,業務層,資料層。故,我們將不討論任何涉及業務(商務邏輯)層和資料層功能的實現。

Web層需要解決的問題:

1、  資料的輸入。如何獲得基於無狀態HTTP的請求資料。如何將請求的字元資料轉換為對應的模型對象。

2、  輸入資料的驗證。如何驗證輸入資料的合法性並給出明確的錯誤訊息提示 。

3、  資料的輸出。如何展現複雜的對象結構。如何處理複雜的展現邏輯。

4、  資料的傳遞和共用。如何在不同的請求或頁面之間傳遞和共用資料。

5、  頁面的流程管理。如何管理Web應用中的頁面流程。

6、  模組化的管理。如何將複雜的Web應用以模組化的方式管理。

7、  靈活可擴充的架構。如何支援各種不同的展現層技術。如何與業務層或資料層的各種架構整合。

8、  安全和存取控制的管理。如何提供基於Web的安全機制和資源存取控制的管理。

9、  代碼實現的簡潔和高效。如何讓開發步驟和代碼維護變得簡單。如何盡量減少開發的中間環節。如何將公用的功能剝離出來,並可以靈活的組裝應用。

10、                      其它問題。非同步呼叫、國際化支援、檔案上傳、防止重複提交等等。

下面,讓我們來一起看看WebWork是如何解決上面的這些問題。

  WebWork 簡介

 

WebWork是由OpenSymphony組織開發的,致力於組件化和代碼重用的J2EE Web架構。WebWork目前最新版本是2.2.2,現在的WebWork2.x前身是Rickard Oberg開發的WebWork,但現在WebWork已經被拆分成了Xwork1和WebWork2兩個項目,如下示意圖所示:

 



 work簡潔、靈活功能強大,它是一個標準的Command模式架構實現,並且完全從web層脫離出來。Xwork提供了很多核心功能:前端攔截機(interceptor),運行時表單屬性驗證,類型轉換,強大的運算式語言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control依賴倒轉控制)容器等。

WebWork2建立在Xwork之上,處理HTTP的請求和響應。所有的請求都會被它的前端控制器(ServletDispatcher,最新版本是FilterDispatcher)截獲。前端控制器對請求的資料進行封裝,初始化上下文資料,根據設定檔尋找請求URL對應的Action類,執行Action,將執行結果轉寄到相應的展現頁面。WebWork2支援多視圖表示,視圖部分可以使用JSP, Velocity, FreeMarker, JasperReports,XML等。

下面我們提到的WebWork將為WebWork2,使用的版本是WebWork2.2.2。

  WebWork 入門 WebWork 安裝

如果只是搭建一個WebWork開發環境,那將非常簡單:

1、  去網站http://www.opensymphony.com/webwork下載最新的WebWork2.2.2項目。

2、  搭建一個Web應用(這個不難吧);並拷貝WebWork架構運行需要的所有Jar檔案到Web應用的WEB-INF/lib中。這些Jar檔案,可以在WebWork項目中lib/default目錄找到,即那個目錄裡面的所有檔案。當然,別忘記今天的“主角”,在WebWork跟目錄下的webwork-2.2.2.jar檔案。

3、  在Web.xml檔案中配置WebWork的前端控制器FilterDispatcher,也就是一個普通的Servlet Filter(過濾器)而已。代碼如下:

    < filter >

        < filter-name > webwork </ filter-name >

        < filter-class > com.opensymphony.webwork.dispatcher.FilterDispatcher </ filter-class >

    </ filter >

 

    < filter-mapping >

        < filter-name > webwork </ filter-name >

        < url-pattern > /* </ url-pattern >

  </ filter-mapping >

 

不過如果是在實際項目中使用,安裝過程中還是有一些問題需要注意的:

1、  關於前端控制器。在以前WebWork2版本裡面,前端控制器是ServeltDispatcher,它是一個JavaServlet。而現在是一個Filter(過濾器),會導致無法在頁面中使用Jsp的include來包含一個WebWork的Action請求的URL。如果真的需要這樣做,可以使用WebWork的action標籤庫。

2、  關於Action請求URL的尾碼。我們知道,在一般的Web架構中,前端控制器會將特定尾碼的請求URL映射到對應的Action請求中。而我們這裡的前端控制器會接受任意的請求,但它預設是將.action結尾的URL映射為WebWork的Action請求。我們可以在webwork.properties檔案中,設定我們自己的尾碼名,多個尾碼名可以用逗號隔開。例如:webwork.action.extension=action,do

3、  在 Jsp 頁面中, WebWork 的標籤庫不需要在 web.xml 中定義,在頁面中通過如下的代碼直接引用: <%@ taglib prefix = "ww" uri = "/webwork" %>

4、  在Jsp頁面中,預設“altSyntax”是開啟的。它是用來解決標籤庫中的字串和運算式語言混淆的問題。所以,作為變數的運算式語言應該放在%{}中,否則WebWork會把它當作字串處理。

5、  如果展現層技術使用Freemarker(WebWork官方的推薦,也是我個人的推薦),如果在頁面中需要使用標籤庫,必須在web.xml中配置JspSupportServlet,代碼如下:

      < servlet >

      < servlet-name >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.