SpringMVC拦截器的使用

SpringMVC拦截器是什么

SpringMVC拦截器是对Handler的一个功能扩展。对Handler方法执行前后的一个处理。

怎么写一个SpringMVC拦截器

当一个类实现HandlerInterceptor接口,它就是一个符合拦截器规范的一个拦截器。

实现代码

public class Interceptor01 implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {//在Handler之前执行。返回值为boolean,true表示继续执行后面的拦截器或者Handler,false表示默认不对页面进行操作,显示空白页面。所以当我们返回false时就是用户的请求有错误。应该有友善的提示信息。

        System.out.println("preHandler-----Interceptor01");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {//Handler执行完成后,执行该方法。
        System.out.println("postHandle-----Interceptor01");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {//当所有拦截器的postHandle方法执行完毕后,执行该方法。记住是所有的拦截器postHandle方法执行完毕。
        System.out.println("afterCompletion-----Interceptor01");
    }

}

配置SpringMVC拦截器

注意:拦截器的作用域为当前的处理器映射器。拦截器的作用域很重要,不同的拦截器映射器无法共享拦截器,只有重新配置。

创建Handler:

public class ItemController implements Controller{

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        System.out.println("Execute Handler");

        return null;
    }
}

把Handler对象让Spring容器进行管理:

<bean id="itemsListId" class="cn.domarvel.controller.ItemController"></bean>

让SpringMVC拦截器对象被Spring容器进行管理:

<bean id="interceptor01" class="cn.domarvel.interceptor.Interceptor01"></bean>

把拦截器配置到映射器当中:

<!-- 简单url映射 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="interceptor01"/>
        </list>
    </property>
    <property name="mappings">
        <props>
            <!-- 对itemsListId进行url映射,url是/showItemsList1.action -->
            <!-- 对同一个Handler后端处理器可以配置多个url进行解析 -->
            <!-- 多个映射处理器类可以共存,并且可以写相同的url -->
            <!-- 先匹配到url的处理器映射器来返回Handler,后面的就不会再返回了。匹配顺序根据处理器映射器的顺序来的。因为Spring的容器是一个LinkedHashMap类型,一个有序但是不能重复的map集合。(通过查看源码知道的) -->
            <prop key="showItemsList1.action">itemsListId</prop>
            <prop key="showItemsList2.action">itemsListId</prop>
            <prop key="showItemsList*.action">itemsListId</prop>
            <prop key="item*.action">itemOperationSet</prop>
        </props>
    </property>
</bean>

部署服务,之后访问相关的页面就行了。

比如我这里访问:http://localhost:8080/SpringMVC/showItemsList2232.action

输出结果:

preHandler-----Interceptor01
Execute Handler
postHandle-----Interceptor01
afterCompletion-----Interceptor01

嗯,非常Nice!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值