SpringMVC拦截器
拦截器(interceptor)的作用
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0oBqr3aU-1650703595670)(spring.assets/image-20220423121032784.png)]](https://img-blog.csdnimg.cn/03fa5f5a9bee4a5eaf5fd759b9be7e97.png)
拦截器和过滤器的区别
一般Spring或SpringMVC项目用Interceptor
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UMQDofny-1650703595670)(spring.assets/image-20220423121124175.png)]](https://img-blog.csdnimg.cn/9afd32942ebf4568b16b96e8f6fcc5f3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ay86ay86aqR5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
SpringMVC拦截器入门案例
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lo0Y2TqI-1650703595671)(spring.assets/image-20220423121618546.png)]](https://img-blog.csdnimg.cn/6a0a79b215a74e2199c75e6d09c94e04.png)
新建项目
new -> module
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wNPWyACX-1650703595671)(spring.assets/image-20220423122024416.png)]](https://img-blog.csdnimg.cn/a86b6bef5d274aa09c0a3c816e104a10.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ay86ay86aqR5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
导入坐标
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
编写Spring-mvc.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
">
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:default-servlet-handler/>
<context:component-scan base-package="com.taotao.controller"/>
</beans>
编写web.xml
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
编写index.jsp
<%@page language="java" contentType="text/html;charset=UTF-8" %>
<%@page isELIgnored="false"%>
<html>
<body>
<h2>Hello World!${name}</h2>
</body>
</html>
编写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...");
}
}
成功测试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VutEabAz-1650703595672)(spring.assets/image-20220423153804238.png)]](https://img-blog.csdnimg.cn/3ac06e920f3a44ad937755cae9709c93.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ay86ay86aqR5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
编写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
配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.taotao.interceptor.MyInterceptor1"/>
</mvc:interceptor>
</mvc:interceptors>
成功测试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qTRs3w9t-1650703595673)(spring.assets/image-20220423155157631.png)]](https://img-blog.csdnimg.cn/1d4650a4136443aaaf27d5bef4d9b41b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ay86ay86aqR5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
preHandle方法
变更preHandle返回值为true
编写MyInterceptor1.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...");
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...");
}
}
成功测试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KFAPLFsC-1650703595674)(spring.assets/image-20220423155352277.png)]](https://img-blog.csdnimg.cn/cd1424a131e942d1ae0ce5beafca9d32.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ay86ay86aqR5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
新建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" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>error!!</h1>
</body>
</html>
编写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;
}else{
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...");
}
}
成功测试
不带参数
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s3a4hsym-1650703595675)(spring.assets/image-20220423162433355.png)]](https://img-blog.csdnimg.cn/fabadeadbae644a5943f19cc72c6fca9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ay86ay86aqR5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
参数非 yes
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QXocSM1f-1650703595675)(spring.assets/image-20220423162521855.png)]](https://img-blog.csdnimg.cn/96b6c7a0c2044eae954f58be0f5659b5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ay86ay86aqR5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
参数为yes
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y2JFaEye-1650703595676)(spring.assets/image-20220423162552720.png)]](https://img-blog.csdnimg.cn/43eb6727505b424794f72c7e6dc76949.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ay86ay86aqR5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
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;
}else{
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...");
}
}
成功测试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f84w0xOx-1650703595677)(spring.assets/image-20220423163145867.png)]](https://img-blog.csdnimg.cn/a8b8763e77134b9795322c182fc22fcf.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ay86ay86aqR5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
新建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;
}
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
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.taotao.interceptor.MyInterceptor1"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.taotao.interceptor.MyInterceptor2"/>
</mvc:interceptor>
</mvc:interceptors>
成功测试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vtiqTpH-1650703595677)(spring.assets/image-20220423163656450.png)]](https://img-blog.csdnimg.cn/7ae8b269d5494c7199c0f4a9add72225.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6ay86ay86aqR5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
注意
拦截器执行先后顺序
1号拦截器先执行的原因,是因为xml配置拦截器的先后顺序
拦截器自我总结
鬼鬼骑士: 学完spring-mvc拦截器后关于我对“面向切面(AOP)”编程的简述:
鬼鬼骑士: 在一个类中编写流程代码可以轻松控制整个项目“开始”,“跳转”,“终止过程”,这个类叫做拦截器,我们仅仅需要在xml配置文件中开启或关闭此拦截器类,来确认是否应该应用此“过程”
|