栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC -SpringMVC拦截器详解与案例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC -SpringMVC拦截器详解与案例

文章目录
  • SpringMVC拦截器
    • 拦截器(interceptor)的作用
    • 拦截器和过滤器的区别
  • SpringMVC拦截器入门案例
    • 新建项目
      • 导入坐标
      • 编写Spring-mvc.xml
      • 编写web.xml
      • 编写index.jsp
      • 编写TargetController1类
      • 成功测试
      • 编写MyInterceptor类
      • 编写Spring-mvc.xml
      • 成功测试
    • preHandle方法
      • 变更preHandle返回值为true
      • 成功测试
      • 新建error视图
      • 编写preHandle
      • 成功测试
    • postHandle方法
      • 编写postHandle
      • 成功测试
    • 新建MyInterceptor2.java
      • 编写MyInterceptro2.java
      • 编写Spring-mvc.xml
      • 成功测试
        • 注意
  • 拦截器自我总结

SpringMVC拦截器 拦截器(interceptor)的作用

拦截器和过滤器的区别

一般Spring或SpringMVC项目用Interceptor

SpringMVC拦截器入门案例

新建项目

new -> module

导入坐标

  
    mysql
    mysql-connector-java
    5.1.32
  

  
    c3p0
    c3p0
    0.9.1.2
  

  
    com.alibaba
    druid
    1.1.10
  

  
    junit
    junit
    4.12
    test
  

  
    org.springframework
    spring-context
    5.0.5.RELEASE
  

  
    org.springframework
    spring-test
    5.0.5.RELEASE
  

  
    javax.servlet
    javax.servlet-api
    3.0.1
    provided
  

  
    javax.servlet.jsp
    javax.servlet.jsp-api
    2.2.1
    provided
  

  
    org.springframework
    spring-web
    5.0.5.RELEASE
  

  
    org.springframework
    spring-webmvc
    5.0.5.RELEASE
  

  
    com.fasterxml.jackson.core
    jackson-core
    2.9.0
  

  
    com.fasterxml.jackson.core
    jackson-databind
    2.9.0
  

  
    com.fasterxml.jackson.core
    jackson-annotations
    2.9.0
  

  
    commons-fileupload
    commons-fileupload
    1.3.1
  

  
    commons-io
    commons-io
    2.3
  

  
    org.springframework
    spring-jdbc
    5.0.5.RELEASE
  

  
    org.springframework
    spring-tx
    5.0.5.RELEASE
  




  
    org.apache.tomcat.maven
    tomcat7-maven-plugin
    2.2
  


编写Spring-mvc.xml




    


    
        
        
    


    


    


编写web.xml
  
  
    DispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:spring-mvc.xml
    
    1
  
  
    DispatcherServlet
    /
  
编写index.jsp
<%@page language="java"  contentType="text/html;charset=UTF-8" %>
<%@page isELIgnored="false"%>


Hello World!${name}

编写TargetController1类
package com.taotao.interceptor;

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

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


@SuppressWarnings({"all"})
public class MyInterceptor1 implements HandlerInterceptor {
    //在目标方法执行之前 执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle...");
        return false;
    }

    //在目标方法执行之后 视图对象返回之前执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    //在流程都执行完毕后 执行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

成功测试

编写MyInterceptor类
package com.taotao.interceptor;

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

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


@SuppressWarnings({"all"})
public class MyInterceptor implements HandlerInterceptor {
    //在目标方法执行之前 执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle...");
        return false;
    }

    //在目标方法执行之后 视图对象返回之前执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    //在流程都执行完毕后 执行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

编写Spring-mvc.xml

配置拦截器


    
        

            
    //在目标方法执行之前 执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle...");
        return true;
    }

    //在目标方法执行之后 视图对象返回之前执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    //在流程都执行完毕后 执行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

成功测试

新建error视图
<%--
  Created by IntelliJ IDEA.
  User: guigui
  Date: 2022/4/23
  Time: 16:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


error!!

编写preHandle

编写MyInterceptor.java

package com.taotao.interceptor;

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

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


@SuppressWarnings({"all"})
public class MyInterceptor1 implements HandlerInterceptor {
    //在目标方法执行之前 执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle...");
        String param = request.getParameter("param");
        if(param.equals("yes")){
            return true;    //返回true代表放行 false代表不放行
        }else{
            //跳转视图到error.jsp
            request.getRequestDispatcher("/error.jsp").forward(request,response);
            return false;
        }
    }

    //在目标方法执行之后 视图对象返回之前执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    //在流程都执行完毕后 执行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

成功测试

不带参数

参数非 yes

参数为yes

postHandle方法 编写postHandle
modelAndView.addObject("name","liuhongtao");
package com.taotao.interceptor;

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

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


@SuppressWarnings({"all"})
public class MyInterceptor1 implements HandlerInterceptor {
    //在目标方法执行之前 执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle...");
        String param = request.getParameter("param");
        if("yes".equals(param)){
            return true;    //返回true代表放行 false代表不放行
        }else{
            //跳转视图到error.jsp
            request.getRequestDispatcher("/error.jsp").forward(request,response);
            return false;
        }
    }

    //在目标方法执行之后 视图对象返回之前执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        modelAndView.addObject("name","liuhongtao");
        System.out.println("postHandle...");
    }

    //在流程都执行完毕后 执行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

成功测试

新建MyInterceptor2.java 编写MyInterceptro2.java
package com.taotao.interceptor;

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

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


@SuppressWarnings({"all"})
public class MyInterceptor2 implements HandlerInterceptor {
    //在目标方法执行之前 执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle2222222...");
        return true;    //返回true代表放行 false代表不放行

    }

    //在目标方法执行之后 视图对象返回之前执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        modelAndView.addObject("name","liuhongtao");
        System.out.println("postHandle2222...");
    }

    //在流程都执行完毕后 执行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion2222...");
    }
}

编写Spring-mvc.xml

    
        

            
            
        

        
            
            
            
        
    
成功测试

注意

拦截器执行先后顺序

1号拦截器先执行的原因,是因为xml配置拦截器的先后顺序

拦截器自我总结

鬼鬼骑士:
学完spring-mvc拦截器后关于我对“面向切面(AOP)”编程的简述:

鬼鬼骑士:
在一个类中编写流程代码可以轻松控制整个项目“开始”,“跳转”,“终止过程”,这个类叫做拦截器,我们仅仅需要在xml配置文件中开启或关闭此拦截器类,来确认是否应该应用此“过程”

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/830681.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号