程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring Web Flow 2.0入門 - 什麼情況下可以使用Spring Web Flow?

Spring Web Flow 2.0入門 - 什麼情況下可以使用Spring Web Flow?

編輯:關於JAVA

前面講了,Spring Web Flow 提供了描述業務流程的抽象能力,但對一種 Web 開發技術而言,僅有這些是不夠的。同時,Spring Web Flow 是不是能夠取代其他 Web MVC 技術?或者在任何情況下都應優先使用 Spring Web Flow ?要回答這些問題,先來看一下 Spring Web Flow 所著力解決的技術問題。

Web 應用程序的三種范圍

Java Servlet 規范為 Web 應用程序中用到的各種對象規定了三種范圍( scope ),分別是 request 范圍、 session 范圍和 application 范圍。

request 范圍中的對象是跟客戶的請求綁定在一起的,每次請求結束都會銷毀對象,而新的請求過來時又會重新創建對象。 request 范圍適合存放數據量較大的臨時數據。

session 范圍中的對象是跟會話( session )綁定在一起的,每次會話結束會銷毀這些對象,而新的會話中又會重新創建。 HTTP 協議本身是無狀態的,服務器和客戶端要實現會話的管理,只能借助於一些輔助的手段,如在協議的數據包中加一些隱藏的記號,等等。 session 范圍適合存放本次會話需要保留的數據。

application 范圍的對象是跟應用程序本身綁定在一起,從 Servlet API 的角度來講,就是存放在 ServletContext 中的對象,它們隨著 Servlet 的啟動而創建,Servlet 關閉時才會銷毀。 application 范圍適合存放那些與應用程序全局相關的數據。

現實開發中最令人頭痛的莫過於 session 范圍,Java Servlet 規范指明可在 web.xml 中按如下方式配置 session 的有效時間為100分鐘:

清單 2 web.xml 中 session 的配置

<session-config>
<session-timeout>100</session-timeout>
</session-config>

然而,現實中的 session 范圍更像是“雞肋”,把大量數據放入 session 會導致嚴重的效率問題,在分布式的環境中處理 session 范圍更是一不小心就會出錯,但拋棄 session 又會給開發帶來許多不便。 request 范圍雖說能存放量大的數據,但有效范圍有限。擺在開發者面前的很多用例都要求一種比 request 范圍要長,但又比 session 范圍要短的這麼一種有效范圍。

Spring Web Flow 的解決方案

針對 Java Servlet 規范中的這個缺陷,Spring Web Flow 2.0 中提供了以下兩種范圍:

flow 范圍。此范圍內的對象在 flow 開始時創建,flow 結束時銷毀,在 flow 定義文件中可通過“ flowScope ”變量名來訪問。

conversation 范圍。此范圍內的對象與 flow 范圍對象基本相似,唯一不同在於 conversation 范圍內的對象所在的 flow 如果調用了其他 subflow ,那麼在 subflow 中也可訪問該對象。

備注:subflow 定義:被其他 flow 所調用的 flow 即可稱為 subflow。

由於 flow 是由開發人員自己定義的,可根據業務的需求自由改變,flow 范圍和 conversation 范圍的使用也就突破了 Java Servlet 規范中 session 范圍和 request 范圍的局限,真正做到了自由定制。

並非所有情形都適用 Spring Web Flow

可以看出,Spring Web Flow 所著力解決的問題即是客戶端與服務器的對話( conversation )問題,這個范圍比 request 要長,而比 session 要短。為實現 conversation 范圍(即 flow 范圍),需要付出效率上的代價,因此,並非所有 Web 應用都適合使用 Spring Web Flow 。 Seth Ladd 等人所著 Expert Spring MVC and Web Flow 一書,對何時使用Spring Web Flow,列出了如下表格。

表 1 何時使用 Spring Web Flow

解決方案 何時使用 Spring MVC Controller 某個單獨的、只需較少業務邏輯就可創建的頁面,同時該頁面不是 flow 的一部分 Spring MVC SimpleFormController 某個只涉及表單提交的頁面,如一個搜索框 Spring MVC AbstractWizardFormController 由一系列導航頁面組成的業務過程 Spring Web Flow 任何比較復雜的、有狀態的、需要在多個頁面之間跳轉的業務過程

Spring Web Flow 的其他特點

Web Flow 作為一個單獨的概念被提出來,也可算是 Spring Web Flow 的一大亮點。目前大多數 Web MVC 框架都把重點把在各種 controller 和形形色色的 view 技術上面,對 Web 應用流程本身的關注是不夠的,Web Flow 的提出就提供了一層抽象,設計者就可以從 Web Flow 抽象層面來進行設計、開發。當然,Web Flow 不能理解為只是 Web 頁面間的跳轉流程,定義 Spring Web Flow 的語義並非只限於頁面之間的跳轉,而可以是 Web 應用中的各種行為。由此,用例的模型建構好以後,就可直接從該模型轉換到相應的 Web Flow,開發人員的設計變得更加直觀、有效。

另外,在 Spring Web Flow 中重用 Web Flow 是比較容易的。在定義 flow 、 state 時可通過繼承某個已有的 flow 或 state ,來避免重復定義。同時,一個 flow 可以調用其它 flow ,就跟一般程序語言中在某個函數內部調用其它函數一樣方便。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved