2016-04-06 62 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)。 –

相关问题