ホームページ  >  記事  >  Java  >  静的ファイルにアクセスする Spring MVC の詳細な紹介

静的ファイルにアクセスする Spring MVC の詳細な紹介

巴扎黑
巴扎黑オリジナル
2017-09-08 09:38:201740ブラウズ

この記事では主に静的ファイルにアクセスするための Spring MVC の関連情報を詳しく紹介します。興味のある方は参考にしてください。

DispatcherServlet URL のサフィックス付きの "*.do" をインターセプトする方法はありません。静的リソースにアクセスできないという問題。

REST スタイルを実装するために DispatcherServlet が「/」をインターセプトし、すべてのリクエストをインターセプトする場合、*.js や *.jpg などの静的ファイルへのアクセスもインターセプトされます。

私たちはこの問題を解決する必要があります。

目的: 静的ファイルには正常にアクセスでき、静的ファイルが見つからない場合でも 404 は報告されません。

オプション 1: 静的ファイルを処理するために Tomcat のdefaultServlet をアクティブにする

Xml コード


<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>

複数のファイルを 1 つずつ構成するには

DispatcherServlet の前に書き込むには、defaultServlet を使用しますインターセプトリクエストがSpringに入らないように最初にリクエストしてください。パフォーマンスは最高だと思います。

Tomcat、Jetty、JBoss、および GlassFish に付属するデフォルトのサーブレットの名前 -- 「default」
Google App Engine に付属するデフォルトのサーブレットの名前 -- 「_ah_default」

Resin には「resin-file」が付属しています
WebLogic にはデフォルトのサーブレットの名前が付いています -- 「FileServlet」

WebSphere にはデフォルトのサーブレットの名前が付いています -- 「SimpleFileServlet」

オプション 2:
Spring 3.0 .4 以降のバージョンでは、mvc:resources が提供されます。 使用方法:
Xml コード


<!-- 对静态资源文件的访问 -->  
<mvc:resources mapping="/images/**" location="/images/" />

/images/** を ResourceHttpRequestHandler にマッピングして処理し、location で静的リソースの場所を指定することができます。 Web アプリケーションのルート ディレクトリまたは jar パッケージ内に配置して、静的リソースを jar パッケージに圧縮できるようにします。キャッシュ期間は静的リソースの Web キャッシュを有効にできます


次のエラーが発生する場合は、463d7d566f84e66ad507872587b9c14c が構成されていないことが原因である可能性があります。
エラー警告: 'springMVC' という名前の DispatcherServlet に URI [/mvc/user/findUser/lisi/770] の HTTP リクエストのマッピングが見つかりません


マッピング URI を登録するには、0ae9c4654228e9a3749855ffd4888474 を使用してください。 SimpleUrlHandlerMapping の urlMap では、キーはマッピングの URI パターン値で、値は ResourceHttpRequestHandler です。これにより、静的リソースへのアクセスが HandlerMapping から ResourceHttpRequestHandler に巧みに転送され、処理と返されるため、jar パッケージ内のクラスパス ディレクトリと静的リソースがサポートされます。 Access.


もう 1 つの注意点は、SimpleUrlHandlerMapping に defaultHandler を設定しないことです。静的 URI の defaultHandler は ResourceHttpRequestHandler であるため、それ以外の場合は静的リソースのリクエストを処理できません。 -servlet -handler/>

Xml コード



<mvc:default-servlet-handler/>

は、「/**」 URL を SimpleUrlHandlerMapping の urlMap に登録し、静的リソースへのアクセスを HandlerMapping から org.springframework.web.servlet.resource に転送します。 .DefaultServletHttpRequestHandler は処理して返します。

DefaultServletHttpRequestHandler は各サーブレット コンテナのデフォルトのサーブレットを使用します。

追加説明: 複数の HandlerMapping 問題の実行順序:
DefaultAnnotationHandlerMapping の順序属性値は: 0

546b08a625488166427bddf4614ceab5 自動的に登録される SimpleUrlHandlerMapping の order 属性値は: 2147483647


spring は小さい順の値を実行します初め 。 a.jpg 画像ファイルにアクセスするときは、まず DefaultAnnotationHandlerMapping を通じてプロセッサを見つけます。a.jpg というアクションがないため、プロセッサが見つからないはずです。あとはorder値の昇順で検索すると、最後のSimpleUrlHandlerMappingが「/**」に一致するので間違いなく一致し、画像に応答することができます。


画像にアクセスするには、マッチングのレイヤーを通過する必要があります。パフォーマンスがどうなっているかわからないですか?

最後に、プラン 2 とプラン 3 について説明します。静的リソースにアクセスする場合、一致する (おおよその) 合計インターセプターがあれば、そのインターセプターが使用されます。インターセプトで権限チェックを実装する場合は、静的ファイルに対するこれらのリクエストを慎重にフィルタリングしてください。


DispatcherServlet が *.do のような URL 接尾辞をインターセプトする場合、上記の問題は存在しません。やはり接尾辞があると便利です。

以上が静的ファイルにアクセスする Spring MVC の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。