この記事の例では、Javaweb での静的ファイルの一般的な処理方法をまとめています。これは、Javaweb プログラム開発において非常に実用的です。具体的な方法は次のとおりです。
方法 1: Tomcat のdefaultServlet をアクティブにして静的ファイルを処理する
web.xml に追加します。
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</サーブレット名> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
注: これは DispatcherServlet の前に記述し、defaultServlet が最初にリクエストをインターセプトするようにして、リクエストが Spring に入らないようにする必要があります。パフォーマンスは最高だと思います。
Tomcat、Jetty、JBoss、および GlassFish に付属するデフォルトのサーブレットの名前 -- 「default」
Google App Engine に付属するデフォルトのサーブレットの名前 -- 「_ah_default」
レジンに付属するデフォルトのサーブレットの名前 -- 「resin-file」
WebLogic に付属するデフォルトのサーブレットの名前 -- 「FileServlet」
WebSphere に付属するデフォルトのサーブレットの名前 -- 「SimpleFileServlet」
方法 2: mvc:resources は Spring 3.0.4 以降のバージョンで提供されます。 使用方法:
<!-- 静的リソース ファイルへのアクセス --> <mvc:resources Mapping="/images/**" location="/images/" />
説明: /images/** は処理のために ResourceHttpRequestHandler にマップされ、location は静的リソースの場所を指定します。これは、静的リソースを圧縮できるように、Web アプリケーションのルート ディレクトリの下または jar パッケージ内に置くことができます。瓶のパッケージ。キャッシュ期間により、静的リソースを Web キャッシュできるようになります
方法 3、<mvc:default-servlet-handler/> を使用する
<mvc:default-servlet-handler/>
SimpleUrlHandlerMapping の urlMap に「/**」の URL が登録され、静的リソースへのアクセスが HandlerMapping から org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler に転送されて処理されて戻ります。
DefaultServletHttpRequestHandler は、各サーブレット コンテナのデフォルトのサーブレットを使用します。
補足:複数のHandlerMappingの実行順序の問題:
DefaultAnnotationHandlerMapping の order 属性値は次のとおりです: 0
<mvc:resources/>自動登録された SimpleUrlHandlerMapping の order 属性値は 2147483646 です。
<mvc:default-servlet-handler/>自動登録された SimpleUrlHandlerMapping の order 属性値は 2147483647 です。
Spring は、小さい値の注文を最初に実行します。 a.jpg 画像ファイルにアクセスするときは、まず DefaultAnnotationHandlerMapping を通じてプロセッサを見つけます。a.jpg というアクションがないため、プロセッサが見つからないはずです。あとはorder値の昇順で検索すると、最後のSimpleUrlHandlerMappingが「/**」に一致するので間違いなく一致し、画像に応答することができます。
画像にアクセスするには、マッチングのレイヤーを通過する必要があります。パフォーマンスがどうなっているかわからないですか?
最後に、スキーム 2 とスキーム 3 で静的リソースにアクセスする場合、一致する (おおよその) 合計インターセプターがあれば、そのインターセプターが使用されることを説明します。インターセプトで権限チェックを実装する場合は、静的ファイルに対するこれらのリクエストを慎重にフィルタリングしてください。
DispatcherServlet が *.do などの URL サフィックスをインターセプトする場合、上記の問題は発生しません。やはり接尾辞があると便利です。