0

私の目標は、/{任意のパス}と*.htmlを/*をマッピングせずにサーブレットにマッピングすることです。例えば:

map:
/foo
/foobar/
/bar.html
/foo/bar.html

don't map:
/foo.js
/bar.pdf

これを行うために、次のようにマップされたサーブレットとウェルカムファイルがあります。

web.xml:

<servlet-mapping>
 <servlet-name>someServlet</servlet-name>
 <url-pattern>*.html</url-pattern>
</servlet-mapping>

<welcome-file-list>
 <welcome-file>index.html</welcome-file>
</welcome-file-list>

コントローラーでは、

@RequestMapping(value="/index.html", method=RequestMethod.GET)
public ModelAndView showPage(HttpServletRequest request){
  ...
}

これは機能しません-サーブレットはでトリガーされません/test。ただし、で空のファイルを作成すると/test/index.html、それが機能することがわかりました。デフォルトのサーブレットは、index.htmlを見つけることで何らかの形で役立つと思います。

残念ながら、静的ファイルに頼ることはできません。空白ファイルをハックせずに、また/ *サーブレットにマッピングせずに、このマッピングを機能させる方法はありますか?

4

1 に答える 1

2

答えは、Springで処理するかどうかによって異なります。

  • .htmlで終わる、または拡張子のないURLのみ、または
  • .jsや.pdfなどで終わるURLを除くすべてのURL

これらのルールは両方とも、質問で指定したリストと一致します。ただし、2番目の方が実装が簡単です。Springに処理させたくない拡張機能の既知のリストがある場合は、ファイル内のそれらのファイルをweb.xml次のようなデフォルトのハンドラーにマップするだけです。

<servlet-mapping>
    <servlet-name>someServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>

ただし、これは、Springに処理させたくないすべての拡張機能を知っている場合にのみ機能します。これは、各拡張機能をにリストする必要があるためですweb.xml

.html以外の拡張子を本当に拒否したい場合は、Springのデフォルトの動作をなんらかの方法でオーバーライドする必要があります。上記の方が良い選択肢だと思うので、ここでは説明しません。しかし、それを行うための2つの可能な方法がこの質問で説明されています:スプリングMVC * .htmlファイルのDispatcherServletをバイパスする方法は?

于 2011-04-13T03:12:39.373 に答える