Spring MVC拦截器映射问题
我有这段XML:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/statics/**" />
<bean class="com.company.website.servlet.StaticsHandlerInterceptor" />
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/data/**" />
<bean class="com.company.website.servlet.AJAXHandlerInterceptor" />
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.company.website.servlet.PageHandlerInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
我有三个不同的拦截器,这StaticsHandlerInterceptor
是有原因的,尽管仅仅是preHandle
返回的方法true
(对于我的所有静态内容(js,css等))。第二个是针对AJAX请求的。第三个是实际页面。我所看到的是,在应有的时候调用了静态函数和AJAX拦截器。但是,使用它们,页面拦截器总是被调用。我只希望为页面调用页面拦截器。我如何做到这一点?
-
假设您为页面使用一致的命名方案,请使用该命名方案-例如,如果您的外部可见页面URL以结尾
.html
,请指定:<mvc:mapping path="/**/*.html" />
尽管具有这样的“扩展”并不是很RESTful-您可能更喜欢使用以下方案:
- GET
/user/{id}
= =返回用户{id}的用户对象,JSON格式 - POST
/user/{id}
=从 JSON对象 更新用户 对象 - GET to
/user/page/{id}
=返回用户{id}的 HTML页面 - 等
然后,您可以使用一个不错的可读性,语义映射,例如:
<mvc:mapping path="/**/page/**" />
这将适用于URL结构的任何“深度”。
编辑:
确定,所以看来使用mvc:interceptors风格的bean声明不会为您提供表达能力,您需要通过模式而不是包含来指定 排除 。根据我在本博客中所得出的结论,使用更详细的
HandlerMapping
方法将使您可以
反转 匹配逻辑-您可以指定 不 匹配的内容以获取所需的内容:<bean id="nonStaticNonDataMapper" class="org.springplugins.web.IgnoreSelectedAnnotationHandlerMapping"> <property name="order"> <value>0</value> </property> <property name="urls"> <list> <value>/statics/**</value> <value>/data/**</value> </list> </property> <property name="interceptors"> <list> <bean class="com.company.website.servlet.PageHandlerInterceptor" /> </list> </property>
(为上述代码段的格式表示歉意,Markdown认为/**
只是注释:-) - GET
-
Spring MVC从拦截器获取映射控制器方法
2021-02-02 关注 0 浏览173 1答案
-
Spring MVC中的拦截器
2021-02-02 关注 0 浏览87 1答案
-
Spring 3 MVC @Controller与AOP拦截器?
2021-02-02 关注 0 浏览131 1答案
-
Spring MVC处理程序拦截器未运行
2021-02-02 关注 0 浏览84 1答案
-
如何在Spring MVC拦截器中验证会话
2021-02-02 关注 0 浏览165 1答案
-
Spring MVC 3:拦截器返回错误的视图
2021-02-02 关注 0 浏览82 1答案
-
如何使用Spring MVC拦截器更改发布的值
2021-02-02 关注 0 浏览95 1答案
-
是否可以使用注释连接Spring MVC拦截器?
2021-02-02 关注 0 浏览90 1答案
-
如何在Spring MVC 3.0中注册处理程序拦截器?
2021-01-30 关注 0 浏览129 1答案
-
如何在Spring MVC 3.0中注册处理程序拦截器?
2021-02-02 关注 0 浏览107 1答案