SSM-SpringMVC-33:SpringMVC中拦截器Interceptor讲解
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
拦截器Interceptor:
对处理方法进行双向的拦截,可以对其做日志记录等
我选择的是实现HandlerInterceptor接口
我把执行流程放上来,单个拦截器的和多个拦截器的,然后写个Demo案例,就可以正式结束Springmvc,过几天写完SSM整合,SSM就结束了,将来有机会多放几个项目在博客园上
图1,单个拦截器执行流程

图2,多个拦截器的执行流程

我会给大家定义俩个拦截器,大家跑一下,看看执行顺序,另外大家可以举一反三的扩充,定义多个拦截器或者在拦截器的方法中填实际的处理代码
案例Demo开始
1.自定义第一个拦截器FirstInterceptor
package cn.dawn.day25interceptor;/**
* Created by dawn on 2018-04-02.
*/ import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class FirstInterceptor implements HandlerInterceptor{
//在Handler执行前执行
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("preHandle=============");
return true;
} public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle=============");
} public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("afterCompletion=============");
}
}
preHandle这个方法,它的返回值决定了下面俩个方法是否执行,如果false,则不会执行下面的那俩方法
2.自定义第二个拦截器SecondInterceptor
package cn.dawn.day25interceptor;/**
* Created by dawn on 2018-04-02.
*/ import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class SecondInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("Second preHandle=============");
return true;
} public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("Second postHandle=============");
} public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("Second afterCompletion=============");
}
}
3.自定义处理器和处理方法
package cn.dawn.day25interceptor;/**
* Created by dawn on 2018-04-02.
*/ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class FirstController {
@RequestMapping("/first")
public String doFirst(){
System.out.println("Handler method");
return "success";
}
}
4.自己的xml配置文件中配置一道,将拦截器配置上去
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!--包扫描器-->
<context:component-scan base-package="cn.dawn.day25interceptor"></context:component-scan>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/day25/"></property>
<property name="suffix" value=".jsp"></property>
</bean> <!--拦截器配置-->
<mvc:interceptors> <!--配置多个拦截器,多个拦截器链--> <mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.dawn.day25interceptor.FirstInterceptor"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.dawn.day25interceptor.SecondInterceptor"></bean>
</mvc:interceptor> </mvc:interceptors> <!--绑定注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven> </beans>
此处的拦截器位置的前后,决定了他们执行的先后
此处的/**表示任意多级目录的任意方法,全部的意思
5.修改web.xml的中央调度器的上下文配置位置为上面那个xml
6.jsp页面,我不是return了个success么,所以建一个success.jsp
<%--
Created by IntelliJ IDEA.
User: Dawn
Date: //
Time: :
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>成功</title>
</head>
<body>
<h1>SUCCESS</h1>
</body>
</html>
7.启动tomcat,访问处理器的那个处理方法/first
SSM-SpringMVC-33:SpringMVC中拦截器Interceptor讲解的更多相关文章
- SpringMVC处理器拦截器 Interceptor
拦截器概念 Java 里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种 ...
- java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
java 过滤器Filter: package com.sun.test.aircraft.filter;import javax.servlet.*;import java.io.IOExcepti ...
- SpringMVC自定义多个拦截器执行顺序
一.正常流程下的拦截器(全部放行) 1.springMVC中拦截器实现这个接口HandlerInterceptor 第一个拦截器 HandlerInterceptor1 public class ...
- SpringMVC框架六:拦截器
拦截器的概念就不介绍了: SpringMVC中拦截器的执行规则: 一个小示例展示: 我搞两个拦截器: 第一个: package org.dreamtech.springmvc.interceptor; ...
- java框架之SpringMVC(2)-补充及拦截器
高级参数绑定 package com.zze.springmvc.web.controller; import org.springframework.stereotype.Controller; i ...
- SpringMVC札集(09)——拦截器
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- springmvc实现简单的拦截器
SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方 ...
- Spring MVC中的拦截器Interceptor
谈谈spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们验证是否登陆.预先设置数据以及统计方法的执行效率等等.今天就来详细的谈一下spring中的拦截器.spring中拦截器主 ...
- 【SpringMVC】 4.3 拦截器
SpringMVC学习记录 注意:以下内容是学习 北京动力节点 的SpringMVC视频后所记录的笔记.源码以及个人的理解等,记录下来仅供学习 第4章 SpringMVC 核心技术 4.3 拦截器 ...
随机推荐
- 《java入门第一季》之面向对象面试题
1:方法重写和方法重载的区别?方法重载能改变返回值类型吗? 方法重写: 在子类中,出现和父类中一模一样的方法声明的现象. 方法重载: 同一个类中,出现的方法名相同,参数列表不同的现象. 方法重载能改变 ...
- iOS监听模式系列之NSNotificationCenter的简单使用
NSNotificationCenter 对于这个没必要多说,就是一个消息通知机制,类似广播.观察者只需要向消息中心注册感兴趣的东西,当有地方发出这个消息的时候,通知中心会发送给注册这个消息的对象.这 ...
- C语言之选择排序
选择法排序是相对好理解的排序算法.假设要对含有n个数的序列进行升序排列,算法步骤是: 1.从数组存放的n个数中找出最小数的下标(算法见下面的"求最值"),然后将最小数与第1个数交换 ...
- Leetcode_190_Reverse Bits
), return 964176192 (represented in binary as00111001011110000010100101000000). 思路: (1)题意为给定无符号32位整数 ...
- C++实现双链表
#include <iostream> using namespace std ; #define NR(x) (sizeof(x)/sizeof(x[0])) class node { ...
- objective-c中@autoreleasepool的用法
objc中关于自动释放池,有两种语法,一种old-fashioned是: NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //d ...
- Oracle 中Return 和exit的区别
在Oracle存储过程中,使用Return 时,如果执行到Return语句,会跳出整个语句(如果是循环,会跳出整个循环),将不再执行,也就是结束了整个存储过程. 下面就用一个例子来说明一下 ,这个存储 ...
- 【省带宽、压成本专题】深入解析 H.265 编码模式,带你了解 Apple 全面推进 H.265 的原因
过去几年,又拍云一直在点播.直播等视频应用方面潜心钻研,取得了不俗的成果.我们结合点播.直播.短视频等业务中的用户场景,推出了"省带宽.压成本"系列文章,从编码技术.网络架构等角度 ...
- Html5深受欢迎的理由
一.世界知名浏览器厂商对Html5的支持 微软:2010年微软称完成Ie9的开发后,讲更对支持css3.svg和html5等互联网浏览通用标准. Google:2010年谷歌重点开发html5项目. ...
- ios中block访问外部变量的一些注意点
Block类型是一个C级别的语法和运行机制.它与标准的C函数类似,不同之处在于,它除了有可执行代码以外,它还包含了与堆.栈内存绑定的变量.因此,Block对象包含着一组状态数据,这些数据在程序执行时用 ...