1. 程式人生 > >《Spring 5 官方文件》21. 與其他Web框架整合

《Spring 5 官方文件》21. 與其他Web框架整合

原文連結 譯者:dan  QQ:903585177

21. 與其他Web框架整合

21.1 簡介

Spring Web Flow

Spring Web Flow (SWF) 旨在成為管理Web應用程式頁面流的最佳解決方案。

SWF與Servlet和Portlet環境中的Spring MVC和JSF等現有框架整合。 如果您有一個業務流程(或流程)將受益於會話模型而不是純粹的請求模型,則SWF可能是解決方案。

SWF允許您將邏輯頁面流作為在不同情況下可重用的自包含模組捕獲,因此非常適合構建引導使用者通過驅動業務流程的受控導航的Web應用程式模組。

本章詳細介紹了Spring與第三方Web框架的整合,如 

JSF.

 Spring框架的核心價值主張之一是自由選擇。在一般意義上,Spring並不強迫某人使用或購買任何特定的架構,技術或方法(儘管它肯定建議其他人使用)。這種選擇與開發人員及其開發團隊最相關的架構,技術或方法的自由可以說是在Web領域最為明顯的一個領域,Spring領域同時提供了自己的Web框架(Spring MVC)提供與許多受歡迎的第三方網路框架的整合。這允許人們繼續利用在特定的Web框架(如JSF)中獲得的任何和所有技能,同時能夠享受Spring在其他領域(如資料訪問,宣告式交易)管理,靈活配置和應用程式組裝。

放棄了the woolly sales patter(c.f.前一段),本章的其餘部分將集中在Web框架與Spring整合的細節。開發人員從其他語言開始Java經常評論的一件事就是Java中可用的Web框架的豐富程度。 Java中確實有大量的Web框架;事實上,在一個章節中有太多的東西可以覆蓋任何細節的外表。本章從Java中選出了四個更受歡迎的Web框架,從所有支援的Web框架通用的Spring配置開始,然後詳細說明每個支援的Web框架的特定整合選項。

[Note]

請注意,本章不會嘗試解釋如何使用任何受支援的Web框架。例如,如果要將JSF用於Web應用程式的表示層,那麼假設您已經熟悉了JSF本身。如果您需要有關任何支援的Web框架本身的更多詳細資訊,請參閱本章末尾 Section 21.6, “Further Resources” .

21.2 普通配置

在介紹每個支援的Web框架的整合細節之前,我們首先來看看Spring配置,這些配置不是特定於任何一個Web框架的。 (本節同樣適用於Spring自己的Web框架,Spring MVC。)

(Spring’s)輕量級應用程式模型支援的一個概念(為了想要更好的詞)就是分層架構。請記住,在“經典”分層架構中,網路層只是多層次之一;它作為伺服器端應用程式的入口點之一,它委託服務層定義的服務物件(外觀),以滿足業務特定(和表示技術不可知)用例。在Spring中,這些服務物件,任何其他特定於業務的物件,資料訪問物件等存在於不同的“業務上下文”中,其不包含web或表示層物件(諸如Spring MVC控制器之類的呈現物件通常在獨特的“簡報”)。本節詳細介紹瞭如何在一個應用程式中配置包含所有“business bean”的Spring容器(WebApplicationContext)。

具體細節:所有需要做的是在一個人的Web應用程式的標準Java EE servlet web.xml檔案中宣告一個ContextLoaderListener,並新增一個contextConfigLocation <context-param/>(在同一個檔案中)來定義哪個集合的Spring XML配置檔案載入。

在<listener />配置下方查詢:

<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

在 <context-param/> 配置下方查詢:

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

如果不指定contextConfigLocation上下文引數,ContextLoaderListener將查詢一個名為/WEB-INF/applicationContext.xml的檔案載入。一旦載入了上下文檔案,Spring將基於bean定義建立一個WebApplicationContext物件,並將其儲存在Web應用程式的ServletContext中。

所有Java Web框架都構建在Servlet API之上,因此可以使用以下程式碼片段來訪問由ContextLoaderListener建立的“business context”ApplicationContext。

WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

The WebApplicationContextUtils 類是為了方便起見,因此您不必記住ServletContext屬性的名稱。如果WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE鍵下不存在一個物件,它的getWebApplicationContext()方法將返回null。而不是在應用程式中獲得NullPointerExceptions的風險,最好使用getRequiredWebApplicationContext()方法。當ApplicationContext丟失時,此方法丟擲異常。

一旦你引用了WebApplicationContext,你可以通過它們的名字或型別檢索bean。大多數開發人員通過名稱檢索bean,然後將其轉換為其實現的介面之一.

幸運的是,本節中的大部分框架具有更簡單的查詢bean的方法。它不僅使得從Spring容器獲取bean變得容易,而且還允許您在其控制器上使用依賴注入。每個Web框架部分都有其具體整合策略的更多細節。

21.3 JavaServer Faces 1.2

JavaServer Faces(JSF)是JCP的標準組件,事件驅動的Web使用者介面框架。 從Java EE 5開始,它是Java EE umbrella的官方部分.

對於受歡迎的JSF執行時以及流行的JSF元件庫,請檢視 Apache MyFaces project. MyFaces專案還提供常見的JSF擴充套件 ,比如MyFaces Orchestra: 一個基於Spring的JSF擴充套件,可以提供豐富的會話範圍支援。

[Note]

Spring Web Flow 2.0通過其新建立的Spring Faces模組提供豐富的JSF支援,無論是以JSF為中心的用途(如本節所述)和Spring中心使用(在Spring MVC排程程式中使用JSF檢視)。 檢視 Spring Web Flow website 瞭解詳情!

Spring的JSF整合中的關鍵要素是JSF ELResolver機制。

21.3.1 SpringBeanFacesELResolver (JSF 1.2+)

SpringBeanFacesELResolver 是符合JSF 1.2的ELResolver實現, 與JSF 1.2和JSP 2.1使用的標準Unified EL整合像SpringBeanVariableResolver一樣,它首先將Spring的“business context”WebApplicationContext委託給基於JSF實現的預設解析器.

在配置方面,只需在JSF 1.2 faces-context.xml檔案中定義SpringBeanFacesELResolver:

<faces-config>
	<application>
		<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
		...
	</application>
</faces-config>

21.3.2 FacesContextUtils

當將屬性對映到faces-config.xml中的bean時,自定義VariableResolver可以正常工作,但有時可能需要明確地獲取一個bean,TheFacesContextUtils 類使這個變得容易. 它類似於WebApplicationContextUtils,除了它需要一個FacesContext引數,而不是一個ServletContext引數.

ApplicationContext ctx = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());

21.4 Apache Struts 2.x

Craig McClanahan建立, Struts 是由Apache Software Foundation託管的一個開源專案。 當時,它大大簡化了JSP / Servlet程式設計範例,並贏得了許多正在使用專有框架的開發人員。 它簡化了程式設計模式,它是開放原始碼(因此像啤酒一樣自由),它擁有一個大型社群,這使得該專案在Java Web開發人員中成長和流行.

檢視Strut Spring Plugin ,用於Struts附帶的內建Spring整合。

21.5 Tapestry 5.x

Tapestry是一個“面向元件的框架,用於在Java中建立動態,強大,高度可擴充套件的Web應用程式”。

雖然Spring擁有自已強大的 powerful web layer, 但是通過組合Tapestry用於Web使用者介面和用於較低層的Spring容器來構建企業Java應用程式,有許多獨特的優勢。

21.6 Further Resources

關於這章節各種Web框架的詳解介紹,請點選下面的連結.