SpringMVC拦截器简单使用

一、拦截器的配置

1、传统的配置

<bean   
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >
<property name="interceptors">
<!-- 多个拦截器,顺序执行 -->
<list>
<ref bean="commonInterceptor"/>
</list>
</property>
</bean>
<!--
如果不定义mappingURL,则默认拦截所有对Controller的请求 ;
可以使用正则表达式对url进行匹配,从而更细粒度的进行拦截(.*/entryOrJsonController\.do\?action=reg.*);
-->
<bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor">
<property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/>
</bean>


2、基于注解的配置

<!-- 拦截器 -->
1.<!-- 拦截器 -->
2. <mvc:interceptors>
3. <!-- 多个拦截器,顺序执行 -->
4. <mvc:interceptor>
5. <mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->
6. <bean class="com.wy.interceptor.CommonInterceptor"></bean>
7. </mvc:interceptor>
8. </mvc:interceptors>
二、拦截器类


[code="java"]1.package com.wy.interceptor;
2.
3.import javax.servlet.http.HttpServletRequest;
4.import javax.servlet.http.HttpServletResponse;
5.
6.import org.apache.log4j.Logger;
7.import org.springframework.web.servlet.HandlerInterceptor;
8.import org.springframework.web.servlet.ModelAndView;
9.
10.public class CommonInterceptor implements HandlerInterceptor {
11.
12. private Logger log = Logger.getLogger(CommonInterceptor.class);
13.
14. public CommonInterceptor() {
15. // TODO Auto-generated constructor stub
16. }
17.
18. private String mappingURL;//利用正则映射到需要拦截的路径
19. public void setMappingURL(String mappingURL) {
20. this.mappingURL = mappingURL;
21. }
22.
23. /**
24. * 在业务处理器处理请求之前被调用
25. * 如果返回false
26. * 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
27. *
28. * 如果返回true
29. * 执行下一个拦截器,直到所有的拦截器都执行完毕
30. * 再执行被拦截的Controller
31. * 然后进入拦截器链,
32. * 从最后一个拦截器往回执行所有的postHandle()
33. * 接着再从最后一个拦截器往回执行所有的afterCompletion()
34. */
35. @Override
36. public boolean preHandle(HttpServletRequest request,
37. HttpServletResponse response, Object handler) throws Exception {
38. // TODO Auto-generated method stub
39. log.info("==============执行顺序: 1、preHandle================");
40. String url=request.getRequestURL().toString();
41. if(mappingURL==null || url.matches(mappingURL)){
42. request.getRequestDispatcher("/msg.jsp").forward(request, response);
43. return false;
44. }
45. return true;
46. }
47.
48. //在业务处理器处理请求执行完成后,生成视图之前执行的动作
49. @Override
50. public void postHandle(HttpServletRequest request,
51. HttpServletResponse response, Object handler,
52. ModelAndView modelAndView) throws Exception {
53. // TODO Auto-generated method stub
54. log.info("==============执行顺序: 2、postHandle================");
55. }
56.
57. /**
58. * 在DispatcherServlet完全处理完请求后被调用
59. *
60. * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()
61. */
62. @Override
63. public void afterCompletion(HttpServletRequest request,
64. HttpServletResponse response, Object handler, Exception ex)
65. throws Exception {
66. // TODO Auto-generated method stub
67. log.info("==============执行顺序: 3、afterCompletion================");
68. }
69.
70.}
注意:注释中的说明。



完整的spring配置文件

<?xml version="1.0" encoding="UTF-8" ?>    
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">

<!-- 默认的注解映射的支持 ,它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter
<mvc:annotation-driven />
-->

<!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd -->
<mvc:resources mapping="/jsentryOrJsonController\.do\?action=reg.*);
-->
<bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor">
<property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/>
</bean>

<!-- 处理方法级别上的@RequestMapping注解-->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
<property name="messageConverters">
<util:list id="beanList">
<ref bean="mappingJacksonHttpMessageConverter"/>
</util:list>
</property>
</bean>

<!--
将指定路径的请求直接转到对应的view上,而不需要特定的controller来处理请求 .
注意:此处的映射路径是/hello,请求时http://localhost:8080/SpringMVC/hello
不能在hello.xxx,而不使用此种方式的映射可以加的,因为web.xml配置的是‘/’
-->
<mvc:view-controller path="/hello" view-name="hello" />

<!-- 视图解析器策略 和 视图解析器 -->
<!-- 对JSTL提供良好的支持 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 默认的viewClass,可以不用配置
<property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" />
-->
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>

<!-- 处理JSON数据转换的 -->
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<!-- 为了处理返回的JSON数据的编码,默认是ISO-88859-1的,这里把它设置为UTF-8,解决有乱码的情况 -->
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>

<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

<!--
ResourceBundleViewResolver通过basename所指定的ResourceBundle解析视图名。
对每个待解析的视图,ResourceBundle里的[视图名].class所对应的值就是实现该视图的类。
同样,[视图名].url所对应的值是该视图所对应的URL。
可以指定一个parent view,其它的视图都可以从parent view扩展。
用这种方法,可以声明一个默认的视图。

<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="welcome" />
</bean>
-->

</beans>


【转载地址】
http://blog.sina.com.cn/s/blog_acfebcee01011vgz.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值