2012-05-12 17 views
1

私のディスパッチャーサーブレットは、アプリケーションのルートにマップされます。Spring MVC(3.1.1)の静的コンテンツの提供

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

ウェブルートに「静的」という名前のフォルダがあります。 CSS、JS、イメージファイルが含まれています。ただし、ディスパッチャサーブレットマッピングのために、静的コンテンツのリクエストは404に終わります。

私はこれに対処するための解決策を知っています。

  1. は、より具体的なURLへのディスパッチャマップを作成し、言う:コンテキスト:/アプリ/、その後、デフォルトのサーブレットに条件付きリクエストを傍受するためのフィルタ、およびマップを作成するか、あるいは春のディスパッチャに委任します。

  2. URL書き換えトリック。 <mvc:resources />

を使用して

  • 問題は、私のマッピングはXMLベースであり、である、と私は絶対にアノテーションを使用しての名前に設定すべての場所での私のマッピングを散乱させます。したがって、<mvc:resources />を使用すると、私のXMLベースのマッピングが壊れ、異なるコントローラへのすべてのURLマッピングが失われます。

    これはいくつかの設定を無効にし、それ自体を適用するためです。しかし、静的コンテンツのための最もクリーンなソリューションでもあります。

    <mvc:resources />には、xmlベースのマッピングをオーバーライドしないように指示する方法はありますか?

  • 答えて

    1

    <mvc:resources />は、問題に最適です。

    あなたのDispatcherServletがあなたのサーバーへのすべてのリクエストを処理していると私は理解しています。したがって、リソースタグは、mvc:resourcesロケーション属性で指定された場所にあるファイルを返す必要があります。マップされているもの以外のものをキャッチするべきではありません。

    それはタグに設定することはできません設定をオーバーライドしている場合は、

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

    の線に沿って何かを使用していますが、独自のorg.springframework.web.servlet.resource.ResourceHttpRequestHandler

    0

    コントローラにファイル拡張子を指定することができます。

    <servlet-mapping> 
        <servlet-name>dispatcher</servlet-name> 
        <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 
    

    次に.doで終わるすべてのURLは、ばねのDispatcherServletを通過します。

    +1

    を使用している場合、他の問題を作成し、その次に

    かを.xmlファイル。このURLは、:appcontext:/ abc/def/somethingと動作します。これは動作しません::appcontext:/ abc/def/- 私のハブ(または着陸)URLはもう動作しません。 –

    1

    をインスタンス考える私は、web.xmlでこれを持っています

    <servlet-mapping> 
        <servlet-name>default</servlet-name> 
        <url-pattern>/resources/*</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
        <servlet-name>default</servlet-name> 
        <url-pattern>*.png</url-pattern> 
        <url-pattern>*.js</url-pattern> 
        <url-pattern>*.css</url-pattern> 
        <url-pattern>*.jpg</url-pattern> 
    </servlet-mapping> 
    
    0

    < MVCを追加:デフォルトのサーブレット・ハンドラ/ >をウェブの上部に向かってあなたは注釈に

    @Configuration 
    @EnableWebMvc 
    public class MVCConfig extends WebMvcConfigurerAdapter { 
    
        @Override 
        public void configureDefaultServletHandling(
          DefaultServletHandlerConfigurer configurer) { 
         configurer.enable("default"); 
        } 
    } 
    
    関連する問題