1

ディスパッチャー サーブレットはアプリのルートにマップされます。

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

Webroot に「static」というフォルダーがあります。CSS、JS、および画像ファイルが含まれています。ただし、ディスパッチャー サーブレット マッピングのため、静的コンテンツの要求は 404 で終わります。

これに対処するためのソリューションがあちこちにあることを私は知っています。

  1. ディスパッチャーをより具体的な URL (:context:/app/ など) にマップしてから、フィルターを作成してリクエストをインターセプトし、条件付きでデフォルトのサーブレットにマップするか、Spring ディスパッチャーに委任します。

  2. URL 書き換えのトリック。

  3. 使用して<mvc:resources />

問題は、私のマッピングは XML ベースであり、注釈を使用するという名目でマッピング構成をあちこちに分散させないことです。したがって、を使用する<mvc:resources />と、xml ベースのマッピングが壊れ、別のコントローラーへのすべての URL マッピングが失われます。

これは<mvc:resources /、一部の設定をオーバーライドして独自の設定を適用するためです。しかし、これは静的コンテンツの最もクリーンなソリューションでもあります。

<mvc:resources />私のxmlベースのマッピングを上書きしないように指示する方法はありますか?

4

4 に答える 4

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>
于 2012-12-10T22:56:26.460 に答える
1

<mvc:resources />あなたの問題にぴったりのようです。

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

の線に沿って何かを使用していますか

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

タグで構成できない設定をオーバーライドする場合は、独自のインスタンス化を検討してくださいorg.springframework.web.servlet.resource.ResourceHttpRequestHandler

于 2012-05-12T13:26:34.127 に答える
0

コントローラーのファイル拡張子を指定できます。

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

次に、で終わるすべての URL.doがスプリング DispatcherServlet を通過します。

于 2012-05-12T11:34:45.920 に答える
0

<mvc:default-servlet-handler/> を web.xml ファイルの先頭に追加します

または、注釈を使用している場合

@Configuration
@EnableWebMvc
public class MVCConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable("default");
    }
}
于 2014-06-16T09:57:16.837 に答える