2016-04-06 103 views
1

我定義我的調度servlet的URL映射在web.xml是這樣的:Spring MVC的,爲什麼我的控制器不映射

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

我控制器的方法都被註解:

@RequestMapping(value="/data/sys/CodeCatalogs") 

當我請求網址在瀏覽器中我得到404錯誤,如果我改變映射到這一點:

@RequestMapping(value="/sys/CodeCatalogs") 

完整的URL:

http://localhost:8080/cwe/data/sys/CodeCatalogs 

它的工作原理是什麼?我是春季mvc新手,請幫忙。

我測試URL不包含通配符:

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

那麼這個請求映射將作品:

@RequestMapping(value="/test/foo") 
+0

提供URL以及 –

回答

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

在前面的示例,所有的請求開始/數據和任何與*。做將被命名調度DispatcherServlet的實例來處理結束。

因此,對於控制器的方法都被註解:

@RequestMapping(value="/data/sys/CodeCatalogs") 

http://localhost:8080/cwe/data/sys/CodeCatalogs - Does not match 
http://localhost:8080/cwe/data/data/sys/CodeCatalogs - Does matches 

URL從瀏覽器通過將針對指定的URL和圖案然後 在@RequestMapping中指定的URL的順序匹配。

對於控制器的方法都被註解:

@RequestMapping(value="/test/foo") 

http://localhost:8080/cwe/test/foo - Matches since URL matches the exact pattern which is allowed as per Servlet Specification. 
http://localhost:8080/cwe/data/test/foo - This will also match because of pattern /data/* 
1

對於形/data/sys/CodeCatalogs的傳入請求,servlet容器會消耗/data/部在將模式傳遞給Spring servlet之前。所以控制器將收到/sys/CodeCatalogs,因此這就是爲什麼你的第二個@RequestMapping工作,第一個沒有。

+0

這篇在servlet規範或彈簧MVC文件指定? – WestFarmer

+0

請看看[這裏](http://stackoverflow.com/questions/23153778/tomcat-web-xml-documentation)。 –

相關問題