5

私はSpring MVCアプリケーションを構築しています.frontControllerサーブレットは「/」にマップされ、すべてのリクエストをインターセプトします.Tomcatから静的コンテンツ(.js、.css、.png ...)を提供できるようにします春ではありません。私のアプリの構造は

-webapp/
   styles/
   images/
   WEB-INF/
          views/

デフォルトでは、frontController はアプリのコンテキスト ルートにマップされているため、すべてのリクエストを処理しますが、静的リソースは提供しません。静的リソースの mvc 構成は次のとおりです。

<mvc:resources mapping="/resources/**" location="/"/>

ページのコードは次のとおりです。

<img src="resources/images/logo.png" />

Springの相互作用なしで静的リソースを提供するように Tomcat を構成する必要があります。

なにか提案を?

4

3 に答える 3

7

たとえば、Tomcats のデフォルトのサーブレット (静的コンテンツを処理する) を再マップできます。

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/images/*</url-pattern>
</servlet-mapping>
于 2010-09-18T23:52:15.207 に答える
1

別の潜在的な解決策 - Spring DispatcherServlet.xml ( Spring Docs )に以下を追加するだけです。

<mvc:default-servlet-handler/>

このタグを使用すると、DispatcherServlet を「/」にマッピングできます (したがって、コンテナのデフォルト サーブレットのマッピングをオーバーライドします) 一方で、静的リソース リクエストをコンテナのデフォルト サーブレットで処理できます。「/**」の URL マッピング (優先順位が最も低い) を使用して DefaultServletHttpRequestHandler を構成します。このハンドラは、すべてのリクエストをデフォルトのサーブレットに転送します。

長所(@nosのソリューションと比較して)

  • URL 再マッピング ソリューションの動作は、コンテナーによって異なります。Jetty/Tomcat 6 は、これを「URL/images/* を WEBAPP/images/ にマップする」という意味に解釈します。Tomcat < 6 (およびおそらく他のもの) は、これを「URL/images/ を WEBAPP/* にマップする」ことを意味すると解釈します。これは大きなセキュリティ違反です。
  • サイトから favicon.ico、robots.txt などを提供する場合は、追加の URL マッピングを作成する必要があります。

短所

  • 春はループに入っていますが、これは間違いなく不必要なものです。

さらに、好みのソリューションに関係なく、web.xml に以下を追加して、ディレクトリ リスト (URL/画像など) を防止することをお勧めします。

<servlet>
  <servlet-name>default</servlet-name>
  <init-param>
      <param-name>dirAllowed</param-name>
      <param-value>false</param-value>
  </init-param>
</servlet>
于 2012-07-13T20:56:02.853 に答える
1

このメーリングリストのスレッドを見て、それがあなたが探しているものであるかどうかを確認してください.

于 2010-09-18T23:38:59.793 に答える