2011-04-13 112 views
0

我的目標是不映射/ {任何路徑}和*。html的映射到一個servlet/*。例如:@RequestMapping歡迎文件

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

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

爲了做到這一點,我有一個servlet和歡迎文件映射像這樣:

的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創建一個空白文件,然後將其確實工作 - 我假設默認的servlet以某種方式通過尋找index.html的幫助。

不幸的是,我不能依靠靜態文件。有沒有什麼辦法可以讓這個映射工作,而空白的文件,黑客和沒有映射/ *到servlet?

+1

http://stackoverflow.com/questions/7415084/spring-welcome-file-list-correct-mapping – 2012-10-24 13:40:08

回答

2

的答案取決於你是否希望春天來處理:

  • 只有以html或沒有擴展名,
  • 所有URL,結束除.js文件和.pdf結束這些URL等

這兩項規則將與您在您的問題給了名單。然而,第二個更容易實現。如果你有,你不希望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的默認行爲。我不會介入此處,因爲我認爲上述是更好的選擇。但在這個問題中解釋了兩種可能的解決方法:spring mvc how to bypass DispatcherServlet for *.html files?

+0

我是第一個選擇,但看到第二個選項是多麼乾淨,我會改變我的問題,以便可以使用排除方法解決問題。謝謝 – Keith 2011-04-13 04:12:10