前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【SpringMVC】009-SpringMVC拦截器

【SpringMVC】009-SpringMVC拦截器

作者头像
訾博ZiBo
发布2025-01-06 15:40:17
发布2025-01-06 15:40:17
9600
代码可运行
举报
运行总次数:0
代码可运行

一、SpringMVC拦截器简介

类似过滤器:

拦截器之拦截控制器里面的方法;

二、拦截器入门步骤

第一步:编写拦截器类,必须实现HandlerInterceptor接口;

第二步:配置拦截器;

三、代码示例

拦截器类(MyInterceptorOne):

代码语言:javascript
代码运行次数:0
复制
package com.zibo.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

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

public class MyInterceptorOne implements HandlerInterceptor {
    //预处理,controller方法执行前
    //return 返回值,执行下一个拦截器,如果没有就执行controller中的方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器1执行了!");
        return true;
    }
}

配置拦截器(spring-mvc.xml):

代码语言:javascript
代码运行次数:0
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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="com.zibo.controller"/>
    <!--视图解析器:解析/WEB-INF/pages/文件夹,后缀为.jsp的页面-->
    <!--前缀为所在文件夹,后缀为文件类型,使用的时候只需要指定文件名字即可-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--配置文件解析器,名字必须是multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10495760"/>
    </bean>
    <!--配置异常处理器-->
    <bean id="sysExceptionResolver" class="com.zibo.exception.SysExceptionResolver"/>
    <!--配置拦截器-->
    <mvc:interceptors>
        <!-- 配置拦截器 -->
        <mvc:interceptor>
            <!--要拦截具体的方法-->
            <mvc:mapping path="/hello"/>
            <!--不要拦截的方法-->
            <!--<mvc:exclude-mapping path=""/>-->
            <!--配置拦截器对象-->
            <bean class="com.zibo.interceptor.MyInterceptorOne"/>
        </mvc:interceptor>
    </mvc:interceptors>
    <!--指定前端控制器不进行拦截的文件夹,其他如css、images文件夹类似-->
    <mvc:resources mapping="/js/**" location="/js/"/>
    <!--开启SpringMVC注解的支持和自定义类型转换器-->
    <mvc:annotation-driven/>
</beans>

HelloController类:

代码语言:javascript
代码运行次数:0
复制
package com.zibo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

//控制器
@Controller
public class HelloController {
    //设置路径为"/hello"
    @RequestMapping(value = "/hello")
    public String sayHello(){
        //控制台打印"Hello Spring MVC!"
        System.out.println("Hello Spring MVC!");
        return "success";
    }
}

success.jsp页面:

代码语言:javascript
代码运行次数:0
复制
<%--
  Created by IntelliJ IDEA.
  User: ZiBo
  Date: 2020/8/9
  Time: 15:05
  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>入门成功!</h1>
    <% System.out.println("success.jsp执行了!"); %>
</body>
</html>

运行结果:

四、拦截器接口中的方法

1、preHandle预处理(controller对象的方法执行前执行)

放行示例:
代码语言:javascript
代码运行次数:0
复制
package com.zibo.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

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

public class MyInterceptorOne implements HandlerInterceptor {
    //预处理,controller对象的方法执行前执行
    //return 返回值,执行下一个拦截器,如果没有就执行controller中的方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器1执行了!");
        return true;
    }
}
拦截跳转示例:
代码语言:javascript
代码运行次数:0
复制
package com.zibo.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

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

public class MyInterceptorOne implements HandlerInterceptor {
    //预处理,controller对象的方法执行前执行
    //return 返回值,执行下一个拦截器,如果没有就执行controller中的方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器1执行了!");
        //在此处进行页面跳转
        request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
        return false;
    }
}

2、postHandle(在controller方法执行后,success.jsp执行前,执行该方法)

代码示例:
代码语言:javascript
代码运行次数:0
复制
package com.zibo.interceptor;

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

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

public class MyInterceptorOne implements HandlerInterceptor {
    //预处理,controller对象的方法执行前执行
    //return 返回值,执行下一个拦截器,如果没有就执行controller中的方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器1执行了!");
        return true;
    }
    //在controller方法执行后,success.jsp执行前,执行该方法
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle执行了!");
    }
}
运行结果:
补充说明:

后处理方法也能进行各种操作(比如跳转页面);

3、afterCompletion(在success.jsp执行后,执行该方法)

代码示例:
代码语言:javascript
代码运行次数:0
复制
package com.zibo.interceptor;

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

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

public class MyInterceptorOne implements HandlerInterceptor {
    //预处理,controller方法执行前
    //return 返回值,执行下一个拦截器,如果没有就执行controller中的方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器1执行了!");
        return true;
    }
    //在controller方法执行后,success.jsp执行前,执行该方法
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle执行了!");
    }
    //在success.jsp执行后,执行该方法
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion执行了!");
    }
}
运行结果:
补充说明:

无法跳转页面了!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、SpringMVC拦截器简介
    • 类似过滤器:
  • 二、拦截器入门步骤
  • 三、代码示例
    • 拦截器类(MyInterceptorOne):
    • 配置拦截器(spring-mvc.xml):
    • HelloController类:
    • success.jsp页面:
    • 运行结果:
  • 四、拦截器接口中的方法
    • 1、preHandle预处理(controller对象的方法执行前执行)
      • 放行示例:
      • 拦截跳转示例:
    • 2、postHandle(在controller方法执行后,success.jsp执行前,执行该方法)
      • 代码示例:
      • 运行结果:
      • 补充说明:
    • 3、afterCompletion(在success.jsp执行后,执行该方法)
      • 代码示例:
      • 运行结果:
      • 补充说明:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档