SpringMVC学习系列(七)------拦截器

前言

    在SpringMVC的架构图中,我们可以看到在访问处理器映射器后,springMVC会返回一堆执行链,里面包含了一堆的拦截器和handler,在这里,SpringMVC提供的拦截器类似于servlet中的Filter,用于对handler进行预处理和后处理。

正文

  • 自定义拦截器
        自定义一个拦截器,要实现HandlerInterceptor接口:
package com.xiaojian.springmvc.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class MyHandlerInterceptor implements HandlerInterceptor {

    /**
     * controller执行前调用此方法,返回值表示是否放行,true表示放行.
     * 可以在这个方法中加入登录校验和权限校验等 
     */

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("自定义拦截器在controller之前执行了...");
        return true;
    }

    /**
     * controller执行后,但是没有返回ModelAndView前调用这个方法,可以在这里对数据模型进行加工处理
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {

        System.out.println("自定义的拦截器在ModelAndView返回之前执行了...");
    }

    /**
     * controller执行后,且视图也返回后调用此方法,可以在这里获得controller的异常信息,可以在这个
     * 方法里面记录各类操作日志,或者清理资源等.
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("自定义的拦截器在视图返回后执行了....");
    }

}

写好自定义的拦截器之后,还需要在springmvc.xml文件中配置拦截器:

    <!-- 配置拦截器 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.xiaojian.springmvc.interceptor.MyHandlerInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

在这个配置中,mapping标签代表拦截的路径,我们这里配置了/**代表拦截所有请求。下面的bean标签对应自定义的拦截器即可,我们运行项目,就行测试:
这里写图片描述
可以看到,拦截器的各个方法都被执行了。需要注意的是,如果我们需要配置多个拦截器,执行顺序是按照配置的顺序来执行的。
也可以针对某种mapping配置拦截器:

<bean
    class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="handlerInterceptor1"/>
            <ref bean="handlerInterceptor2"/>
        </list>
    </property>
</bean>
    <bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/>
    <bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/>
  • 静态资源访问
    如果在DispatcherServlet中设置url-pattern为 /则必须对静态资源进行访问处理。
    spring mvc 的<mvc:resources mapping="" location="">实现对静态资源进行映射访问。
    如对js文件访问配置:<mvc:resources location="/js/" mapping="/js/**"/>;

总结

    SpringMVC系列的博文到此就告一段落了,在整个学习过程中,我们对每个部分进行了详细的说明,并且有小的案例来作为演示,随着项目经验的不断增加,肯定会了解到更加底层的东西,在后面的博文中我也会一一记录,作为查阅。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值