Spring MVC静的リソースへのアクセス
問題の説明:
私たちはspring mvcフレームワークの中でURLがもっとRESTfulスタイルに合うために、通常webにいます.xmlではspringフレームservletのurlブロックを「/」、すなわちすべてのリソースのurl要求をブロックするように構成され、これにより、js|css|ピクチャ|すべての静的リソースがフレームのservletブロックを通過する.そうではないはずだ.したがって,servletに対応するurlブロックが「/」の場合,静的リソースへのアクセスはservletブロックを通過すべきではないという問題処理がある.servlet-mappingのurl-patternが「*.do」である場合、一定の接尾辞を持つurlのみをブロックすると、静的リソースアクセスの問題はなくなります.
一、
Spring mvcでのデフォルトアクセスの3つの方法
1>.
最初のtomcatコンテナへのアクセスのデフォルトページ
この方法は通常、初期ページにアクセスするために使用されます.
2>.
第2のspirng mvcデフォルトindex controller方式
(
tomcatコンテナでデフォルトページが構成されていない場合、spring mvcは/indexのcontrollerを自動的に探し、ある場合は呼び出し、ない場合は404ページを表示します)
3>.
第3のspirng mvc構成ルートノードアクセス"/"方式
または
This is a shortcut for defining a ParameterizableViewController that immediately forwards to a view when invoked.
※3つの方法
優先順位は1>3>2
二、
Spring mvcは、RESTFullのurlスタイルを使用して、すべてのリソース要求時の静的リソースへのアクセス構成をブロックし、spring mvcフレームワークのマッチングを回避します.これは必要ではありません.憎いからです.
※.spring mvcフレームワークのservlet-mapping url-patternが「/」の場合、静的リソースを処理しないと、静的リソースへのアクセスが404になる
ソリューション:
1>.
Webアプリケーションサーバ(Tomcatなど)のdefaultServiceletをアクティブにして静的ファイルを処理
複数を構成するには、各ファイル構成がDispatcherServiceletの前に書かれ、defaultServiceletが先にブロックされるようにします.これはSpringには入りません.パフォーマンスが最高かもしれません.
Tomcat,Jetty,JBoss,and GlassFishデフォルトサーブレットの名前--「default」
Google App Engineデフォルトサーブレットの名前--「_ah_default」
Resinデフォルトサーブレットの名前--「resin-file」
WebLogicデフォルトサーブレットの名前--「FileServicelet」
WebSphereのデフォルト・サーブレットの名前--「SimpleFileサーブレット」
2>.
spring 3.0.4以降のバージョンではが提供されます.
/static/**はResourceHttpRequestHandlerにマッピングする処理を行い、locationは静的リソースの場所を指定する.Webアプリケーションのルートディレクトリの下、jarパケットの中で、静的リソースをjarパケットに圧縮することができます.Cache-periodは静的リソースをweb cacheすることができる
次のエラーが発生した場合は、が構成されていない可能性があります.
WARNING:No mapping found for HTTP request with URI[/mvc/user/findUser/lisi/770]in DispatcherService with name'springMVC'
要素を使用して、SimpleUrlHandlerMapingのurlMapにmappingのURIを登録します.
keyはmappingのURI pattern値、valueはResourceHttpRequestHandler、
これにより、静的リソースへのアクセスをHandlerMappingからResourceHttpRequestHandlerに巧みに転送する処理して返すので、classpathディレクトリ、jarパッケージ内の静的リソースへのアクセスをサポートする.
さらに注意すべき点は、SimpleUrlHandlerMappingにdefaultHandlerを設定しないことである.static uriのdefaultHandlerはResourceHttpRequestHandlerなので、
そうでないとstatic resources requestを処理できません.
3>.
の使用
「/**」urlをSimpleUrlHandlerMappingのurlMapに登録し、静的リソースへのアクセスをHandlerMappingからorgに移動します.springframework.web.servlet.resource.DefaultServeretHttpRequestHandlerは処理して戻る.
DefaultServeretHttpRequestHandlerが使用するのは、個々のServertコンテナ独自のデフォルトのServeretである.
補足:複数のHandlerMappingの実行順序の問題:
DefaultAnnotationHandlerMappingのorder属性値は:0
自動登録SimpleUrlHandlerMappingのorder属性値は、2147483646です.
自動登録されたSimpleUrlHandlerMappingのorderプロパティ値は、2147483647です.
Springはorder値が小さいことを先に実行します.a.jpgピクチャファイルにアクセスするときは、まずD e f a ultAnnotationHandlerMappingでプロセッサを探します.きっと見つからないに違いありません.a.jpgというActionはありません.さらにorder値の昇順で探すと、最後のSimpleUrlHandlerMappingは「/**」に一致するので、必ず一致して、画像に応答します.
※
静的リソースをロードするには、フレームワークservletの階層patternを通過し、不要なパフォーマンスオーバーヘッドです.
最後に、フレームservletのurl-patternが「*.go」のように接尾辞を指定する場合、フレームのurlブロックは接尾辞バンドに一致するだけであることを特に強調する.goのrequestでは、静的リソースアクセスの問題はありません.
私たちはspring mvcフレームワークの中でURLがもっとRESTfulスタイルに合うために、通常webにいます.xmlではspringフレームservletのurlブロックを「/」、すなわちすべてのリソースのurl要求をブロックするように構成され、これにより、js|css|ピクチャ|すべての静的リソースがフレームのservletブロックを通過する.そうではないはずだ.したがって,servletに対応するurlブロックが「/」の場合,静的リソースへのアクセスはservletブロックを通過すべきではないという問題処理がある.servlet-mappingのurl-patternが「*.do」である場合、一定の接尾辞を持つurlのみをブロックすると、静的リソースアクセスの問題はなくなります.
一、
Spring mvcでのデフォルトアクセスの3つの方法
1>.
最初のtomcatコンテナへのアクセスのデフォルトページ
<welcome-file-list>
<welcome-file>/index.html</welcome-file>
</welcome-file-list>
この方法は通常、初期ページにアクセスするために使用されます.
2>.
第2のspirng mvcデフォルトindex controller方式
(
tomcatコンテナでデフォルトページが構成されていない場合、spring mvcは/indexのcontrollerを自動的に探し、ある場合は呼び出し、ない場合は404ページを表示します)
@RequestMapping(value="/index")
public ModelAndView index(HttpServletRequest request, HttpServletResponse response){
return new ModelAndView("index");
}
3>.
第3のspirng mvc構成ルートノードアクセス"/"方式
@RequestMapping(value="/")
public ModelAndView index(HttpServletRequest request,HttpServletResponse response){
return new ModelAndView("index");
}
または
<mvc:view-controller path="/" view-name="home"/>
This is a shortcut for defining a ParameterizableViewController that immediately forwards to a view when invoked.
※3つの方法
優先順位は1>3>2
二、
Spring mvcは、RESTFullのurlスタイルを使用して、すべてのリソース要求時の静的リソースへのアクセス構成をブロックし、spring mvcフレームワークのマッチングを回避します.これは必要ではありません.憎いからです.
※.spring mvcフレームワークのservlet-mapping url-patternが「/」の場合、静的リソースを処理しないと、静的リソースへのアクセスが404になる
ソリューション:
1>.
Webアプリケーションサーバ(Tomcatなど)のdefaultServiceletをアクティブにして静的ファイルを処理
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
複数を構成するには、各ファイル構成がDispatcherServiceletの前に書かれ、defaultServiceletが先にブロックされるようにします.これはSpringには入りません.パフォーマンスが最高かもしれません.
Tomcat,Jetty,JBoss,and GlassFishデフォルトサーブレットの名前--「default」
Google App Engineデフォルトサーブレットの名前--「_ah_default」
Resinデフォルトサーブレットの名前--「resin-file」
WebLogicデフォルトサーブレットの名前--「FileServicelet」
WebSphereのデフォルト・サーブレットの名前--「SimpleFileサーブレット」
2>.
spring 3.0.4以降のバージョンでは
<mvc:resources mapping="/static/**" location="/static/" />
/static/**はResourceHttpRequestHandlerにマッピングする処理を行い、locationは静的リソースの場所を指定する.Webアプリケーションのルートディレクトリの下、jarパケットの中で、静的リソースをjarパケットに圧縮することができます.Cache-periodは静的リソースをweb cacheすることができる
次のエラーが発生した場合は、
WARNING:No mapping found for HTTP request with URI[/mvc/user/findUser/lisi/770]in DispatcherService with name'springMVC'
keyはmappingのURI pattern値、valueはResourceHttpRequestHandler、
これにより、静的リソースへのアクセスをHandlerMappingからResourceHttpRequestHandlerに巧みに転送する処理して返すので、classpathディレクトリ、jarパッケージ内の静的リソースへのアクセスをサポートする.
さらに注意すべき点は、SimpleUrlHandlerMappingにdefaultHandlerを設定しないことである.static uriのdefaultHandlerはResourceHttpRequestHandlerなので、
そうでないとstatic resources requestを処理できません.
3>.
<mvc:default-servlet-handler/>
「/**」urlをSimpleUrlHandlerMappingのurlMapに登録し、静的リソースへのアクセスをHandlerMappingからorgに移動します.springframework.web.servlet.resource.DefaultServeretHttpRequestHandlerは処理して戻る.
DefaultServeretHttpRequestHandlerが使用するのは、個々のServertコンテナ独自のデフォルトのServeretである.
補足:複数のHandlerMappingの実行順序の問題:
DefaultAnnotationHandlerMappingのorder属性値は:0
Springはorder値が小さいことを先に実行します.a.jpgピクチャファイルにアクセスするときは、まずD e f a ultAnnotationHandlerMappingでプロセッサを探します.きっと見つからないに違いありません.a.jpgというActionはありません.さらにorder値の昇順で探すと、最後のSimpleUrlHandlerMappingは「/**」に一致するので、必ず一致して、画像に応答します.
※
静的リソースをロードするには、フレームワークservletの階層patternを通過し、不要なパフォーマンスオーバーヘッドです.
最後に、フレームservletのurl-patternが「*.go」のように接尾辞を指定する場合、フレームのurlブロックは接尾辞バンドに一致するだけであることを特に強調する.goのrequestでは、静的リソースアクセスの問題はありません.