目标
通用在SpringStartupListener 类,使用setAlwaysUseFullPath属性, 修改Spring MVC的URL映射控制路径匹配规则,达到满足业务要求
详述
Spring MVC的URL映射有一个控制路径匹配的参数alwaysUseFullPath。默认值为false。
当它被设置为false后,总是使用当前servlet映射内的路径来查找Controller。
当它被设置为true后,总是使用当前servlet上下文中的全路径来查找Controller。
我希望,值为true。
当它被设置为false后(默认值)
servlet url-pattern= "/*"; request URI= "/test/a" 映射的Controller= "/test/a"
servlet url-pattern= "/"; request URI= "/test/a" 映射的Controller= "/test/a"
servlet url-pattern= "/*.do"; request URI= "/test/
a.do
" 映射的Controller= "/test/a"
servlet url-pattern= "/test/*";request URI= "/test/a" 映射的Controller= "/a" (这里不满意)
当它被设置为true后
servlet url-pattern= "/test/*";request URI= "/test/a" 映射的Controller= "/test/a" (现在满意了)
我希望的是,当servlet拦截的是"/test/*" 路径时 ,浏览器访问/test/a 地址,被映射到 /test/a Controller
配置:
在spring-context.xml配置文件中加入以下内容:
<!-- 修改Spring MVC的URL映射控制路径匹配规则,达到满足业务要求 --> <bean class="com.sicheng.common.web.SpringStartupListener"></bean>
如果系统有多个 Spring MVC 的DispatcherServlet容器(子容器),都会被影响
request.getServletPath()返回值的研究
问题描述,我在开发中遇到了以下现象,对我的开发工作造成了干扰。
- request.getServletPath() 的返回值,受 <url-pattern>*.htm</url-pattern> 影响,返回不同结构的值 。
网上也有人遇到了同样的问题,比如这篇文章《request.getServletPath()返回为空的问题》 https://www.ktanx.com/blog/p/3551
为了全面分析,排除干扰,特证明了以下两点
- contextPath 的变化对以上现象并不会产生影响
- map.setAlwaysUseFullPath(true); 设置为true或false 对以上现象并不会产生影响