spring mvc経路整合原則詳細
Spring MVCではよくスクリーンセーバーを使いますが、ブロックが必要な経路を設定する際にはよくサブラベルを使います。パスを指定するためにpath属性があります。たとえば:
Spring MVCの中の経路は標準のweb.xmlよりずっと柔軟です。デフォルトのポリシーはorg.springframe ewark.utill.AntPathMatchを実現しています。名前が提示されているように、パスパターンはApach Antのスタイルパスを使用しています。Apache Antスタイルのパスは三つのワイルドカードマッチング方法があります。これらは多くの柔軟なパスパターンを組み合わせることができます。
Table Ant Wildcard Charcters
Wildcard
Description
?
任意の文字にマッチします。
*
0または任意の数の文字にマッチします。
**
0以上のディレクトリにマッチ
Table Example Ant-Style Path Patterns
Path
Description
//アプリ/*.x
マッチ(Match)すべてのapパスの下にある.xファイル
//ap/p?ttern
マッチ(Match)/ap/patternと/ap/pXtternは含まれていません。
//*/example
マッチ(Match)/ap/example、/ap/foo/example、および/example
/ap/*/dir/file.
マッチ(Match)/ap/dir/file.jsp,/ap/foo/dir/file)/ap/foo/bar/dir/file.pdf,および/ap/dir/file.java
//*/*.jsp
マッチ(Match)任意の.jspファイル
HandlerMapping
一つのWEBアプリは基本的にURLと要求プロセッサのマッピングに依存します。Spring MVCも同じですが、Spring MVCはSpringのすべてのように、URLとControllerの関係をマッピングする方法は一つしかないはずです。マップルールと実装を自分で作成することができます。URLマップだけに依存しません。
SpringはURLのマッピング処理を提供し、処理経路モードの順序と方法は、いかなるインターフェースにも限定されない。Spring MVCのデフォルトはorg.springframe ebork.web.servlet.hander.AbstractUrld HandlerMappingを実現して、一番長いパスパターンで一つの経路に合致します。
例えば、一つの要求が与えられたのは/app/dir/file.jspで、二つのパスマッチングモード/*/jsp.jspと/app/dir/*.jspが存在しています。URLはそのモードにマッチしますか?最後のパターン/app/dir/*.jspは一番長い原則でマッチします。jspよりもっと多くの文字を持っています。この原則はどんなレベルのインターフェースにも指定されていませんが、細部を実現しています。
次にデフォルトの2つのHandlerMappingを見ます。
BenNameUrld HandlerMapping
デフォルトのマッピングポリシーの実装はorg.springframe ebork.web.servlet.hander.BenNameUrlhandlerMapping類です。このクラスは要求を処理する可能性のあるBenに対して、バックスラッシュ(/)文字で始まる名前または別名を付けます。この名前または別名は、URLに合うPathマッチング原則の中の任意の名前です。
Listing A Controller Mapped by a Bean Name
xmlコード
BenNameUrld HandlerMappingの欠点
それは非常に使いやすい反面、欠点もあります。ProttypeのBeanをコピーできません。言い換えれば、BenNameUrlhandlerMappingを使う時、すべての要求処理類は一例しかないです。一般的にはControllersは一例で作られています。これは深刻な問題ではありません。また、後の章でControllerを紹介します。少ないタイプのコントローラがあるだけで、必要なのはプロトタイプです。
■コメント:Prottotype beanは、一例ではないbeanです。Apple ControtのgetBenメソッドを呼び出すたびに、新しいBeanインスタンスに戻ります。
BeanNameUrlhandlerMappingのもう一つの問題はあなたのアプリケーションに存在します。要求のマッピングとBeanのマッピングが結合されています。分離されていないので、Controllerとブロッキングの間に複雑な関係を作ることができません。複雑なマッピング要求があれば、ビーンNameUrlhandlerMappingの代わりにSimpleUrld HandlerMappingを使用してもいいです。SimpleUrlhandlerMappingはBenNameUlHandlerMappingのもう一つの選択として、SimpleUlHandlerMappingはBenName HandlerMappingの2種類のソフトチップマッピングができます。そして、プロセッサとスクリーンとの間に複雑で柔軟なマッピングパスを作成するマッピングアルゴリズムとBenNameUrlhandlerMappingは同じベースコンポーネントを使用することができます。このモードは依然としてURL要求プロセッサにマッピングされています。SimpleUrl HandlerMappingを使用することができます。DisplatServletはタイプによって発見されます。そしてデフォルトのマッパーは作成されません。つまり、両方を使用したいなら、Apple Contectで全部声明します。
■ヒントDisplatch Servletは、チェーン処理要求の処理を行います。これによって、あなたの要求に応じてマッピングを処理することができます。マッピングプロセッサ(Handler mappings)は、Orderインターフェースを実現しました。
締め括りをつける
以上が本文のspring mvc経路整合原則について詳しく説明した内容の全部です。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.i360r.platform.webapp.runtime.view.interceptor.GenericInterceptor" />
</mvc:interceptor>
</mvc:interceptor>
以上の構成により、このブロックはすべての要求をブロックします。Spring MVCの中の経路は標準のweb.xmlよりずっと柔軟です。デフォルトのポリシーはorg.springframe ewark.utill.AntPathMatchを実現しています。名前が提示されているように、パスパターンはApach Antのスタイルパスを使用しています。Apache Antスタイルのパスは三つのワイルドカードマッチング方法があります。これらは多くの柔軟なパスパターンを組み合わせることができます。
Table Ant Wildcard Charcters
Wildcard
Description
?
任意の文字にマッチします。
*
0または任意の数の文字にマッチします。
**
0以上のディレクトリにマッチ
Table Example Ant-Style Path Patterns
Path
Description
//アプリ/*.x
マッチ(Match)すべてのapパスの下にある.xファイル
//ap/p?ttern
マッチ(Match)/ap/patternと/ap/pXtternは含まれていません。
//*/example
マッチ(Match)/ap/example、/ap/foo/example、および/example
/ap/*/dir/file.
マッチ(Match)/ap/dir/file.jsp,/ap/foo/dir/file)/ap/foo/bar/dir/file.pdf,および/ap/dir/file.java
//*/*.jsp
マッチ(Match)任意の.jspファイル
HandlerMapping
一つのWEBアプリは基本的にURLと要求プロセッサのマッピングに依存します。Spring MVCも同じですが、Spring MVCはSpringのすべてのように、URLとControllerの関係をマッピングする方法は一つしかないはずです。マップルールと実装を自分で作成することができます。URLマップだけに依存しません。
SpringはURLのマッピング処理を提供し、処理経路モードの順序と方法は、いかなるインターフェースにも限定されない。Spring MVCのデフォルトはorg.springframe ebork.web.servlet.hander.AbstractUrld HandlerMappingを実現して、一番長いパスパターンで一つの経路に合致します。
例えば、一つの要求が与えられたのは/app/dir/file.jspで、二つのパスマッチングモード/*/jsp.jspと/app/dir/*.jspが存在しています。URLはそのモードにマッチしますか?最後のパターン/app/dir/*.jspは一番長い原則でマッチします。jspよりもっと多くの文字を持っています。この原則はどんなレベルのインターフェースにも指定されていませんが、細部を実現しています。
次にデフォルトの2つのHandlerMappingを見ます。
BenNameUrld HandlerMapping
デフォルトのマッピングポリシーの実装はorg.springframe ebork.web.servlet.hander.BenNameUrlhandlerMapping類です。このクラスは要求を処理する可能性のあるBenに対して、バックスラッシュ(/)文字で始まる名前または別名を付けます。この名前または別名は、URLに合うPathマッチング原則の中の任意の名前です。
Listing A Controller Mapped by a Bean Name
xmlコード
<bean name="/home" class="com.apress.expertspringmvc.flight.web.HomeController">
<property name="flightService" ref="flightService" />
</bean>
■注意:IDという属性を使って任意のURLパスを指定することはできません。XML規格ではXMLのIDを指定することは禁止されています。ただし、Bean定義ではidとname属性を同時に持つことができます。BenNameUrld HandlerMappingの欠点
それは非常に使いやすい反面、欠点もあります。ProttypeのBeanをコピーできません。言い換えれば、BenNameUrlhandlerMappingを使う時、すべての要求処理類は一例しかないです。一般的にはControllersは一例で作られています。これは深刻な問題ではありません。また、後の章でControllerを紹介します。少ないタイプのコントローラがあるだけで、必要なのはプロトタイプです。
■コメント:Prottotype beanは、一例ではないbeanです。Apple ControtのgetBenメソッドを呼び出すたびに、新しいBeanインスタンスに戻ります。
BeanNameUrlhandlerMappingのもう一つの問題はあなたのアプリケーションに存在します。要求のマッピングとBeanのマッピングが結合されています。分離されていないので、Controllerとブロッキングの間に複雑な関係を作ることができません。複雑なマッピング要求があれば、ビーンNameUrlhandlerMappingの代わりにSimpleUrld HandlerMappingを使用してもいいです。SimpleUrlhandlerMappingはBenNameUlHandlerMappingのもう一つの選択として、SimpleUlHandlerMappingはBenName HandlerMappingの2種類のソフトチップマッピングができます。そして、プロセッサとスクリーンとの間に複雑で柔軟なマッピングパスを作成するマッピングアルゴリズムとBenNameUrlhandlerMappingは同じベースコンポーネントを使用することができます。このモードは依然としてURL要求プロセッサにマッピングされています。SimpleUrl HandlerMappingを使用することができます。DisplatServletはタイプによって発見されます。そしてデフォルトのマッパーは作成されません。つまり、両方を使用したいなら、Apple Contectで全部声明します。
■ヒントDisplatch Servletは、チェーン処理要求の処理を行います。これによって、あなたの要求に応じてマッピングを処理することができます。マッピングプロセッサ(Handler mappings)は、Orderインターフェースを実現しました。
締め括りをつける
以上が本文のspring mvc経路整合原則について詳しく説明した内容の全部です。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。