一、坑现象复现
1、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><servlet><servlet-name>smvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><servlet-mapping><servlet-name>smvc</servlet-name><url-pattern>/prefix/*</url-pattern><url-pattern>*.do</url-pattern></servlet-mapping>
</web-app>
2、Controller
@Controller
public class TestController {@RequestMapping(value = "/test/a.do")@ResponseBodypublic String getA(){return "AA";}@RequestMapping(value = "/prefix/b.do")@ResponseBodypublic String getB(){return "BB";}}
3、请求情况
get/post方式请求url:/test/a.do,返回AA
get/post方式请求url:/prefix/b.do,返回错误码405
get/post方式请求url:/prefix/prefix/b.do,返回BB
二、请求不同的原因
Spring MVC的MethodHandler根据Controller的method解析生成url,而Spring MVC将请求URL在URL拦截解析过程中除去web.xml映射的前缀,剩下url串进行MethodHandler匹配,所以get/post请求无法在前缀模式url匹配到MethodHandler进行访问。