码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC拦截器简单使用

时间:2015-05-23 11:38:49      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

一、拦截器的配置

   1、传统的配置

 

Xml代码  技术分享

  1. <bean  

  2.         class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >  

  3.         <property name="interceptors">  

  4.            <!-- 多个拦截器,顺序执行 -->  

  5.            <list>  

  6.               <ref bean="commonInterceptor"/>  

  7.            </list>  

  8.         </property>  

  9.     </bean>  

  10.     <!--   

  11.               如果不定义mappingURL,则默认拦截所有对Controller的请求 ;   

  12.              可以使用正则表达式对url进行匹配,从而更细粒度的进行拦截(.*/entryOrJsonController\.do\?action=reg.*);  

  13.     -->  

  14.     <bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor">  

  15.        <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/>  

  16.     </bean>  

 

  2、基于注解的配置

 

Xml代码  技术分享

  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>  

 

 

 

 

二、拦截器类

 

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配置文件

 

Java代码  技术分享

  1. <?xml version="1.0" encoding="UTF-8" ?>  

  2. <beans xmlns="http://www.springframework.org/schema/beans"  

  3.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  4.         xmlns:context="http://www.springframework.org/schema/context"  

  5.         xmlns:mvc="http://www.springframework.org/schema/mvc"  

  6.         xmlns:util="http://www.springframework.org/schema/util"   

  7.         xsi:schemaLocation="  

  8.           http://www.springframework.org/schema/beans  

  9.           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  

  10.           http://www.springframework.org/schema/context  

  11.           http://www.springframework.org/schema/context/spring-context-3.0.xsd  

  12.           http://www.springframework.org/schema/mvc      

  13.           http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  

  14.           http://www.springframework.org/schema/util   

  15.           http://www.springframework.org/schema/util/spring-util-3.0.xsd">  

  16.       

  17.     <!-- 默认的注解映射的支持 ,它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter   

  18.     <mvc:annotation-driven />  

  19.     -->  

  20.       

  21.     <!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd -->  

  22.     <mvc:resources mapping="/js/**" location="/js/" />  

  23.       

  24.     <!-- 自动扫描注解的Controller -->  

  25.     <context:component-scan base-package="com.wy.controller.annotation" />  

  26.       

  27.     <!-- 处理在类级别上的@RequestMapping注解-->  

  28.     <bean  

  29.         class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >  

  30.         <property name="interceptors">  

  31.            <!-- 多个拦截器,顺序执行 -->  

  32.            <list>  

  33.               <ref bean="commonInterceptor"/>  

  34.            </list>  

  35.         </property>  

  36.     </bean>  

  37.     <!--   

  38.              如果不定义mappingURL,则默认拦截所有对Controller的请求 ;   

  39.              可以使用正则表达式对url进行匹配,从而更细粒度的进行拦截(.*/entryOrJsonController\.do\?action=reg.*);  

  40.     -->  

  41.     <bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor">  

  42.        <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/>  

  43.     </bean>  

  44.           

  45.     <!-- 处理方法级别上的@RequestMapping注解-->  

  46.     <bean  

  47.         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >  

  48.         <property name="messageConverters">    

  49.             <util:list id="beanList">    

  50.                 <ref bean="mappingJacksonHttpMessageConverter"/>    

  51.             </util:list>    

  52.         </property>   

  53.     </bean>  

  54.       

  55.     <!--   

  56.               将指定路径的请求直接转到对应的view上,而不需要特定的controller来处理请求 .  

  57.               注意:此处的映射路径是/hello,请求时http://localhost:8080/SpringMVC/hello  

  58.               不能在hello.xxx,而不使用此种方式的映射可以加的,因为web.xml配置的是‘/’              

  59.      -->  

  60.     <mvc:view-controller path="/hello" view-name="hello" />  

  61.        

  62.     <!-- 视图解析器策略 和 视图解析器 -->  

  63.     <!-- 对JSTL提供良好的支持 -->  

  64.     <bean  

  65.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  

  66.         <!-- 默认的viewClass,可以不用配置  

  67.         <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" />  

  68.          -->  

  69.         <property name="prefix" value="/WEB-INF/page/" />  

  70.         <property name="suffix" value=".jsp" />  

  71.     </bean>  

  72.       

  73.     <!-- 处理JSON数据转换的 -->  

  74.     <bean id="mappingJacksonHttpMessageConverter"   

  75.         class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">   

  76.         <!-- 为了处理返回的JSON数据的编码,默认是ISO-88859-1的,这里把它设置为UTF-8,解决有乱码的情况 -->   

  77.         <property name="supportedMediaTypes">    

  78.             <list>    

  79.                   <value>text/html;charset=UTF-8</value>    

  80.             </list>    

  81.         </property>    

  82.     </bean>    

  83.       

  84.     <!-- 拦截器 -->  

  85.     <mvc:interceptors>  

  86.         <!-- 多个拦截器,顺序执行 -->  

  87.         <mvc:interceptor>  

  88.            <mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->  

  89.            <bean class="com.wy.interceptor.CommonInterceptor"></bean>  

  90.         </mvc:interceptor>  

  91.     </mvc:interceptors>  

  92.       

  93.     <!--   

  94.        ResourceBundleViewResolver通过basename所指定的ResourceBundle解析视图名。  

  95.                   对每个待解析的视图,ResourceBundle里的[视图名].class所对应的值就是实现该视图的类。  

  96.                   同样,[视图名].url所对应的值是该视图所对应的URL。  

  97.                   可以指定一个parent view,其它的视图都可以从parent view扩展。  

  98.                   用这种方法,可以声明一个默认的视图。  

  99.        

  100.     <bean id="messageSource"  

  101.         class="org.springframework.context.support.ResourceBundleMessageSource">  

  102.         <property name="basename" value="welcome" />  

  103.     </bean>  

  104.     -->  

  105.       

  106. </beans>  


SpringMVC拦截器简单使用

标签:

原文地址:http://my.oschina.net/bankofchina/blog/418861

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!