1概要

この記事では、最近のバージョンの

Springフレームワークで利用可能な

DispatcherServlet__を構成するための3つの異なるアプローチについて説明します。


  1. XML

    設定と

    web.xml

    ファイルから始めます.

  2. 次に、サーブレット宣言を

    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

のブロックで、次のようなサーブレットを宣言しています。



  1. ディスパッチャ

    」という名前


  2. org.springframework.web.servlet.DispatcherServlet

    のインスタンスです.


  3. 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("/");
    }
}

この例では、


  1. WebApplicationInitializer

    インターフェースを実装する

  2. 新しく作成した

    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[ここ]。