web.xmlとSpringでのイニシャライザ
1概要
この記事では、最近のバージョンの
Springフレームワークで利用可能な
DispatcherServlet__を構成するための3つの異なるアプローチについて説明します。
-
XML
設定と
web.xml
ファイルから始めます. -
次に、サーブレット宣言を
web.xml
ファイルから次のファイルに移行します.
Javaの設定ですが、他の設定は
XML
のままにします。
。最後に、リファクタリングの3番目と最後のステップでは、
100%Java構成プロジェクト
2
DispatcherServlet
Spring MVC
のコアコンセプトの1つは
DispatcherServlet
です。
Spring documentation
では、次のように定義されています。
HTTPリクエストハンドラ/コントローラ用の中央ディスパッチャ。 Web UIコントローラまたはHTTPベースのリモートサービスエクスポータの場合Web要求を処理するために登録済みハンドラーにディスパッチし、便利なマッピングおよび例外処理機能を提供します。
基本的に
DispatcherServlet
はすべての
Spring MVC
アプリケーションのエントリポイントです。その目的は、
HTTP
要求を傍受し、それを処理する方法を知っている適切なコンポーネントにディスパッチすることです。===
3
web.xml
を使用した設定従来の
Spring
プロジェクトを扱う場合は、
XML
設定を見つけることが非常に一般的で、
Spring
3.1までは
DispatcherServletを設定する唯一の方法は
WEB-INF/web.xml__ファイルを使用することでした。この場合、2つのステップが必要です。設定例を見てみましょう。最初のステップはサーブレット宣言です。
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/dispatcher-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
この
XML
のブロックで、次のようなサーブレットを宣言しています。
「
ディスパッチャ
」という名前
org.springframework.web.servlet.DispatcherServlet
のインスタンスです.
contextConfigLocation
という名前のパラメータで初期化されますこれは設定
XML
へのパスを含みます
load-on-startup
は、複数のサーブレットをロードする順序を指定する整数値です。したがって、複数のサーブレットを宣言する必要がある場合は、それらが初期化される順序を定義できます。低い整数でマークされたサーブレットは、高い整数でマークされたサーブレットより前にロードされます。これでサーブレットが構成されました。 2番目のステップは、
servlet-mapping
を宣言することです。<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
サーブレットマッピングでは、その名前によって
HTTP
要求を処理する
URL
pattern
にバインドします。===
4ハイブリッド構成
Servlet APIs
のバージョン3.0が採用されたため、
web.xml
ファイルはオプションになり、
DispatcherServlet
を設定するためにJavaを使用できるようになりました。
WebApplicationInitializer
を実装したサーブレットを登録できます。これは上記の
XML
設定と同じです。public class MyWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext container) { XmlWebApplicationContext context = new XmlWebApplicationContext(); context.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml"); ServletRegistration.Dynamic dispatcher = container .addServlet("dispatcher", new DispatcherServlet(context)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); } }
この例では、
WebApplicationInitializer
インターフェースを実装する新しく作成した
onStartup
メソッドをオーバーライドします.
XmlWebApplicationContext
は、次のように渡されたのと同じファイルで構成されています
XML
の例のサーブレットへの
contextConfigLocation
。それから、新しいものを使って
DispatcherServlet
のインスタンスを作成します。インスタンス化したばかりのコンテキスト
。そして最後に、マッピング
URL
を使ってサーブレットを登録します。
パターン
そこで、
Java
を使用してサーブレットを宣言し、それを
URLマッピング
にバインドしましたが、設定は別々の
XML
ファイルに保存しました。dispatcher-config.xml
===
5 100%
Java
の設定
このアプローチでは、サーブレットはJavaで宣言されていますが、設定するには
XML
ファイルがまだ必要です。
WebApplicationInitializer
を使用すると、100%
Java
構成を実現できます。前の例をリファクタリングする方法を見てみましょう。
最初にする必要があるのは、サーブレット用のアプリケーションコンテキストを作成することです。
今回は、
Java
とアノテーションを設定に使用し、
dispatcher-config.xml
のような
XML
ファイルが不要になるように、アノテーションベースのコンテキストを使用します。AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
このタイプのコンテキストは、設定クラスを登録して設定できます。
context.register(AppConfig.class);
あるいは、構成クラスのためにスキャンされるパッケージ全体を設定する:
context.setConfigLocation("com.example.app.config");
アプリケーションコンテキストが作成されたので、コンテキストをロードするリスナーを
ServletContext
に追加します。container.addListener(new ContextLoaderListener(context));
次のステップは、ディスパッチャサーブレットを作成して登録することです。
ServletRegistration.Dynamic dispatcher = container .addServlet("dispatcher", new DispatcherServlet(context)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/");
これで、
WebApplicationInitializer
は次のようになります。public class MyWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext container) { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.setConfigLocation("com.example.app.config"); container.addListener(new ContextLoaderListener(context)); ServletRegistration.Dynamic dispatcher = container .addServlet("dispatcher", new DispatcherServlet(context)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); } }
Java
とアノテーション設定は多くの利点を提供します。通常、それはより短くより簡潔な構成につながり、アノテーションは構成するコードと同じ場所に配置されるため、宣言により多くのコンテキストを提供します。しかし、これは必ずしも好ましい方法でも可能な方法でもありません。たとえば、開発者の中にはコードと設定を別々にしておくことを好む人もいれば、修正できないサードパーティコードを扱う必要がある人もいます。
===
6. 結論
この記事では、
Spring 3.2 +
で
DispatcherServlet
を設定するさまざまな方法について説明しました。好みに応じてどちらを使用するかはあなた次第です。あなたが選んだものは何でも
Spring
はあなたの決定に適応します。Github
here
およびhttps://github.com/eugenp/tutorials/tree/のこの記事からソースコードを見つけることができます。 master/spring-mvc-xml[ここ]。