2013-05-01 72 views
1

新鮮事我的最後一次冒險,現在我試圖映射更復雜的URL並努力使它的工作方式Spring的文檔建議它應該。Spring RequestMapping頭疼

此外,這些工具是:

  • 的Java 1.6
  • 春3.2 MVC
  • 的Tomcat 7

我試圖做的是形式的foo匹配的網址/ bar/id其中id是一個整數。事情是這樣好像我應該做到這一點是我的標註控制器的方法是這樣的:

@RequestMapping("/foo/bar/{id}") 

然後在web.xml中有這樣的:

<url-filter>/foo/*</url-filter> 

或者這樣:

<url-filter>/foo/bar/*</url-filter> 

然後在部署到Tomcat後,我應該能夠訪問/ mycontext/foo/bar/id。但那不行。

爲了完整起見,這裏的幾個變化和結果:

  • 方法映射:/富,URL過濾:/ foo的,結果是:/ mycontext /富工程。方法映射:/ foo/*,url-filter:/ foo/*,result:在部署時成功將方法映射到/ foo/*,但訪問/ mycontext/foo/bar失敗。
  • 方法映射:/ foo/*,url-filter:/ foo/bar,結果:在部署時映射,但訪問/ mycontext/foo/bar失敗。
  • 方法映射:/ foo/bar,url-filter:/ foo/bar,結果:/ mycontext/foo/bar工作。方法映射:/ foo/bar/*,url-filter:/ foo/bar/*,result:在部署時映射,但訪問/ mycontext/foo/bar /(任何內容)失敗。
  • 方法映射:/ foo/bar/{id},url-filter:/ foo/bar/*,result:在部署時映射,但訪問/ mycontext/foo/bar /(任何內容)失敗。

所有失敗都會從DispatcherServlet發出的mycontext錯誤消息中發現沒有找到映射,即使它們都報告在部署時成功設置映射。由於我從正確的DispatcherServlet中得到錯誤,這表明我的url-filter設置沒問題。但是關於在部署中成功映射的消息引用了@RequestMapping註解中的任何內容,所以我不知道該怎麼說Spring先說它很好,然後再說它不匹配。

有什麼我不明白通配符在這裏嗎?

+0

對不起,我不熟悉的「URL過濾器」請你提供更多的情況下它周圍? – digitaljoel 2013-05-01 18:45:14

回答

1

如果您有@RequestMapping("/foo/bar/{id}"),它將在與DispatcherServlet的url-模式匹配結合後進行映射。考慮例如其中的url-pattern是如下情況:

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

在這種情況下,DispatcherServlet會映射方法只有當來自客戶端的調用是:/dispatcher/foo/bar/1

所以,如果你想說@RequestMapping對http://<server>/<context>/foo/bar/1迴應說,只是把對DispatcherServlet的你的url-pattern爲/,而不是:

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