众所周知,SpringMVC的DispatchServlet是不可以以/*规则拦截请求的,否则会将JSP都拦截了,但有时候我们的请求路径是不能有后缀(Resful风格的接口需要),基于上述情况,我们可以将web.xml中的路径配置文件改为<url-pattern>/</url-pattern>
/*和/的区别:
/*表示拦截所有的东西,包含动态页面和静态资源,/表示拦截所有的静态资源(html,css,js...)以及请求,除了动态页面(jsp)的其他东西
SpringMVC框架对于实现无后缀请求的解决方案是修改<url-pattern>/</url-pattern>的定义,使<url-pattern>/</url-pattern>也可以让拦截的请求访问静态资源
流程:
1.在web.xml中对<url-pattern>/</url-pattern>进行配置
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classPath:spring-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
2.对SpringMVC进行配置,指定开放的静态资源映射
<mvc:annotation-driven></mvc:annotation-driven> <!-- 方案1:一个个目录放开 <mvc:resources>标签可以放开单个静态资源目录的访问 mapping:指定访问的映射路径 location:指定放开的静态资源文件目录 --> <mvc:resources location="/img/" mapping="/img/**"></mvc:resources> <!-- 方案2:一次性放开所有的静态资源文件目录 --> <mvc:default-servlet-handler/>
注:使用<mvc:**>类的标签必须要先配置<mvc:annotation-driven/>标签