その他 Web フレームワーク

この章では、Spring とサードパーティの Web フレームワークとの統合について詳しく説明します。

Spring Framework の中心的な価値提案の 1 つは、選択を可能にすることです。一般的な意味では、Spring は特定のアーキテクチャー、テクノロジー、方法論の使用や購入を強制しません(確かに他のものよりもいくつかを推奨しています)。開発者とその開発チームに最も関連性のあるアーキテクチャ、テクノロジー、方法論を選択および選択する自由は、Spring が独自の Web フレームワーク(Spring MVC および Spring WebFlux)を提供する Web エリアで最も明白です多くの一般的なサードパーティの Web フレームワークとの統合をサポートします。

共通の構成

サポートされている各 Web フレームワークの統合の詳細に進む前に、まず、1 つの Web フレームワークに固有ではない一般的な Spring 構成を見てみましょう。(このセクションは、Spring 独自の Web フレームワークバリアントにも等しく適用できます。)

Spring の軽量アプリケーションモデルが支持する概念の 1 つ (より良い言葉が必要です) は、階層化された アーキテクチャの概念です。「典型的な」階層化された アーキテクチャでは、Web レイヤーは多くのレイヤーの 1 つに過ぎないことを思い出してください。これは、サーバー側アプリケーションへのエントリポイントの 1 つとして機能し、サービスレイヤーで定義されたサービスオブジェクト (ファサード) に委譲して、ビジネス固有の (およびプレゼンテーションテクノロジにとらわれない) ユースケースを満たします。Spring では、これらのサービスオブジェクト、その他のビジネス固有のオブジェクト、データアクセスオブジェクトなどは、Web またはプレゼンテーション層オブジェクトを含まない個別の「ビジネスコンテキスト」に存在します (Spring MVC コントローラーなどのプレゼンテーションオブジェクトは通常、構成されます)。明確な「プレゼンテーションコンテキスト」で)。このセクションでは、アプリケーション内のすべての「ビジネス Bean」を含む Spring コンテナー ( WebApplicationContext) を構成する方法について詳しく説明します。

詳細に移ると、Web アプリケーションの標準 Jakarta EE サーブレット web.xml ファイルで ContextLoaderListener (Javadoc) を宣言し、どのセットの Spring XML 構成ファイルをロードするかを定義する contextConfigLocation<context-param/> セクションを (同じファイルに) 追加するだけです。

以下の <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 (Javadoc) オブジェクトを作成し、Web アプリケーションの ServletContext に保存します。

すべての Java Web フレームワークはサーブレット API 上に構築されているため、次のコードスニペットを使用して、ContextLoaderListener によって作成されたこの「ビジネスコンテキスト」 ApplicationContext にアクセスできます。

次の例は、WebApplicationContext を取得する方法を示しています。

WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

WebApplicationContextUtils (Javadoc) クラスは便宜上のものであるため、ServletContext 属性の名前を覚えておく必要はありません。オブジェクトが WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE キーに存在しない場合、その getWebApplicationContext() メソッドは null を返します。アプリケーションで NullPointerExceptions を取得するリスクよりも、getRequiredWebApplicationContext() メソッドを使用することをお勧めします。ApplicationContext がない場合、このメソッドは例外をスローします。

WebApplicationContext への参照を取得したら、名前または型で Bean を取得できます。ほとんどの開発者は、Bean を名前で取得し、実装されたインターフェースの 1 つにキャストします。

幸いなことに、このセクションのほとんどのフレームワークには、Bean を検索する簡単な方法があります。Spring コンテナーから Bean を簡単に取得できるだけでなく、コントローラーで依存性注入を使用することもできます。各 Web フレームワークセクションには、特定の統合戦略の詳細があります。

JSF

JavaServer Faces (JSF) は、JCP の標準的なコンポーネントベースの、イベント駆動型の Web ユーザインターフェースフレームワークです。これは Jakarta EE 傘下の公式な一部ですが、Tomcat に Mojarra や MyFaces を組み込むなど、個別に使用することもできます。

JSF の最近のバージョンは、アプリケーションサーバーの CDI インフラストラクチャと密接に結びついており、新しい JSF 機能の一部はそのような環境でのみ機能することに注意してください。Spring の JSF サポートはこれ以上積極的に進化せず、主に古い JSF ベースのアプリケーションを近代化する際の移行目的で存在します。

Spring の JSF 統合の重要な要素は、JSF ELResolver メカニズムです。

Spring Bean リゾルバー

SpringBeanFacesELResolver は JSF 準拠の ELResolver 実装であり、JSF および JSP で使用される標準の Unified EL と統合されています。最初に Spring の「ビジネスコンテキスト」 WebApplicationContext に委譲し、次に基盤となる JSF 実装のデフォルトリゾルバーに委譲します。

設定に関しては、次の例に示すように、JSF faces-context.xml ファイルで SpringBeanFacesELResolver を定義できます。

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

FacesContextUtils を使用する

カスタム ELResolver は、プロパティを faces-config.xml の Bean にマッピングするときにうまく機能しますが、場合によっては、明示的に Bean を取得する必要があります。FacesContextUtils (Javadoc) クラスはこれを簡単にします。WebApplicationContextUtils と似ていますが、ServletContext パラメーターではなく FacesContext パラメーターを使用する点が異なります。

次の例は、FacesContextUtils の使用方法を示しています。

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

Apache Struts

Craig McClanahan によって発明された Struts (英語) は、Apache Software Foundation がホストするオープンソースプロジェクトです。Struts 1.x は、JSP/ サーブレットプログラミングパラダイムを大幅に簡素化し、独自のフレームワークを使用していた多くの開発者の支持を得ました。プログラミングモデルが簡素化され、オープンソースであり、大規模なコミュニティがあったため、プロジェクトは成長し、Java Web 開発者の間で人気を博しました。

元の Struts 1.x の後継として、Struts 2.x またはそれ以降の最新バージョンと、組み込み Spring 統合用の Struts 提供の Spring プラグイン [Apache] (英語) を確認してください。

Apache Tapestry

Tapestry [Apache] (英語) は、「Java で動的で堅牢で高度にスケーラブルな Web アプリケーションを作成するためのコンポーネント指向フレームワーク」です。

Spring には独自の強力な Web 層がありますが、Web ユーザーインターフェース用の Tapestry と下位層用の Spring コンテナーの組み合わせを使用してエンタープライズ Java アプリケーションを構築することには、多くの独自の利点があります。

詳細については、Tapestry の Spring 専用の統合モジュール [Apache] (英語) を参照してください。

その他のリソース

次のリンクは、この章で説明されているさまざまな Web フレームワークに関する詳細なリソースに移動します。