83.参考: URLのパスの設定を
DIコンテナで行う方法
概要
Spring MVCのサンプルや説明をしたWEBなどでは、@RequestMappingアノテーションによるURLパスの設定サンプルが多いですね。
例: @RequestMapping(value="/user/edit/input")
しかしこの方法では、プログラマーにURLのパスを設定させることになります。
大規模な開発や、URLの管理をまとめて一か所で行いたい場合、少し微妙です。
ControllerクラスにURLのパスを記述する、@RequestMappingアノテーションの方法では、
URLの間違いを探すのはかなり骨が折れるでしょう。
ここでは、DI コンテナ(Spring設定ファイル)でURLのパスを設定する方法を見てみます。
しかしその前に予備知識として以下の記事を読まれることをお勧めします。
URLのパスをDIコンテナに記述するサンプル
URLのパスとControllerを結び付けている機能は、HandlerMappingです。(概要の参考記事参照)
ですので、HandlerMappingの派生クラスでURLのパスを設定できるクラスをJavadocから探せばよいことになります。
探してみると、SimpleUrlHandlerMappingクラスが見つかります。
DI コンテナでURLのパスを設定する場合、SimpleUrlHandlerMappingを利用します。
以下では、 05.実際のサンプルを元にして、SimpleUrlHandlerMappingを使用する方法に書き変えてみましょう。
【準備】
以下のリンクのサンプルを作ってください。
元にするサンプル: 05.実際のサンプル
【サンプル(applicationContext.xml)】
以下の記述を追加します。
<!-- Handler Mapping -->
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>
/user/**=userController
/goods/**=goodsController
</value>
</property>
</bean>
【サンプル(Controllerクラス)】
以下のようにサンプルのControllerクラスに付けた@RequestMappingアノテーションは削除してください。
//@RequestMapping(value="/user/")
public class UserController {
【動作】
URLのパスをSpring設定ファイルで管理したい場合、
上記のようにmappingsプロパティに「URLのパス=Controllerクラスのbean名」を記述するだけです。
上記のように記述すると、/user/edit/input.html にアクセスすると、userControllerのinputメソッドを呼び出します。
【URLの記述について】
上記のサンプルを見ていただくと分かるかと思いますが、**のようなAnt形式が使用できます。
【HandlerAdapterについて】
Spring MVCでは、HandlerAdapterが必要ですがサンプルでは特にSpringの設定ファイル(DIコンテナ)に記述していません。
Spring MVCではデフォルトではアノテーションのHandlerAdapterが設定されているので、
記述しない場合はControllerはアノテーションタイプとして扱われます。
そのため、Controllerクラス内の@RequestMappingアノテーションが自動で働きます。
上記の例で、SimpleUrlHandlerMappingで/usrまでしか記述していないのに、"edit/input.html"とinputメソッドがマッピングされるのは
そのためです。
Created Date: 2012/04/28