个人感觉遇到这个问题的人应该不多,或者大家都很了解SpringMVC的运作机制,我没搜到相关的内容,这里做备忘小记下,如果能帮到遇到同样问题的人,也会很开心
大概叙述下背景。
新公司入职,看了下之前的代码,发现用的Restlet+自己封装的jdbc 改东西很不好改,所以就准备往Restlet+spring+mybatis上迁 然后所有的页面都是先到html或者jsp然后异步请求数据,好繁琐。。 我就准备改用Restlet+FreeMarker重写 后来又发现Restlet不是很好用,或者说我用的不熟 就准备迁到SpringMVC,大概就是这么个背景。
因为项目里有一些Servlet,所以我DispatcherServlet没有mapping跟
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/content/*</url-pattern>
</servlet-mapping>
然后有个管理员后台,需要判断一下登录状态,就写了个interceptor,
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/content/**/**"/>
<mvc:exclude-mapping path="/content/login"/>
<bean class="com.xxx.xxx.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
后来发现怎么也映射不到。 琢磨好久想到了DispatcherServlet配的content,发现content这个东西不用配啊 于是改成了
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/**"/>
<mvc:exclude-mapping path="/login"/>
<bean class="com.xxx.xxx.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
然后就行了
可以理解成springMVC的interceptor是对RequestMapping的拦截