1.  工程目录

首先你需要会创建springMVC的入门工程(SpringMVC入门实例,点击前往),工程的目录如下图所示。

interceptor 用来存放拦截器的 java 源文件。

                                                  

SpringMVC 拦截器 工程实例(IntelliJ IDEA)_xml

                     

2.  源文件编写 

2.1  xml 文件配置

2.1.1 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- post 乱码过滤器 -->
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>Encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <!-- post 乱码过滤器指定范围,过滤所有 -->
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- SpringMVC 的前端控制器 -->
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- 拦截了以 ".form" 结尾的URL请求,Web 应用接收到该类请求之后 , 会调用前端控制器-->
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.form</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

</web-app>

2.1.2 dispatcher-servlet.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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">


  <!-- 配置视图解析器 -->
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 前缀 -->
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <!-- 后缀 -->
    <property name="suffix" value=".jsp"/>
  </bean>

  <!-- 扫描配置 -->
  <context:component-scan base-package="com.study.springmvc.controller"/>

  <mvc:annotation-driven/>

  <!-- 配置拦截器 -->
  <mvc:interceptors>
    <!-- 配置第一个拦截器 -->
    <mvc:interceptor>
      <!-- 拦截所有的url请求,包括子url请求 -->
      <mvc:mapping path="/**"/>
      <bean class="com.study.springmvc.interceptor.HandlerInterceptor1"/>
    </mvc:interceptor>

    <!-- 配置第二个拦截器 -->
    <mvc:interceptor>
      <!-- 拦截所有的url请求,包括子url请求 -->
      <mvc:mapping path="/**"/>
      <bean class="com.study.springmvc.interceptor.HandlerInterceptor2"/>
    </mvc:interceptor>
  </mvc:interceptors>

</beans>

2.1.3 applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <!-- empty -->
</beans>

2.2  Java 源文件编写:

2.2.1 HelloUserController.java

package com.study.springmvc.controller;

import com.study.springmvc.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

// @Controller 标识是一个控制器
@Controller
public class HelloUserController {

    @RequestMapping(value = "/helloUser")
    public String handleRequest(Model model, User user) throws Exception {

        // 将接受到的数据传过去
        model.addAttribute("user", user);
        System.out.println(user.toString());

        return "helloUser";
    }
}

2.2.2 HandlerInterceptor1.java

package com.study.springmvc.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 HandlerInterceptor1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        boolean flag = false;
        String name = request.getParameter("userName");
        if(name.equals("syrdbt")) {
            System.out.println("HandlerInterceptor1 preHandle: 用户" + name + "通过");
            flag = true;
        } else {
            System.out.println("HandlerInterceptor1 preHandle: 用户" + name + "不能通过");
            request.setAttribute("message", "错误信息如下: 用户名信息不对");
            request.getRequestDispatcher("index.jsp").forward(request, response);
        }
        return flag;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("HandlerInterceptor1 postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, Exception ex) throws Exception {
        System.out.println("HandlerInterceptor1 afterCompletion");
    }

}

2.2.3 HandlerInterceptor2.java

package com.study.springmvc.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 HandlerInterceptor2 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        boolean flag = false;
        String age = request.getParameter("userAge");
        String name = request.getParameter("userName");

        if(Integer.valueOf(age) == 3) {
            System.out.println("HandlerInterceptor1 preHandle: 用户" + name + age + "岁,通过");
            flag = true;
        } else {
            System.out.println("HandlerInterceptor1 preHandle: 用户" + name + age + "岁,不能通过");
            request.setAttribute("message", "错误信息如下: 用户名年龄不对");
            request.getRequestDispatcher("index.jsp").forward(request, response);
        }
        return flag;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("HandlerInterceptor2 postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, Exception ex) throws Exception {
        System.out.println("HandlerInterceptor2 afterCompletion");
    }

}

2.2.4 User.java

package com.study.springmvc.model;

public class User {
    private String userName;
    private int userAge;

    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", userAge=" + userAge +
                '}';
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getUserAge() {
        return userAge;
    }

    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }
}

2.2.5 Constant.java

package com.study.springmvc;

public class Constant {
    // empty
}

2.3  视图界面编写

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>用户信息登记</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/helloUser.form" method="post">
  用户名:<input type="text" name="userName"/> <br/>
  用户年龄:<input type="text" name="userAge"/> <br/>
  <input type="submit" value="提交">
</form>
<hr>
<h1> ${message} </h1>
</body>
</html>

helloUser.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户信息展示</title>
</head>
<body>
<h1>用户姓名:${user.userName}</h1>
<h1>用户年龄:${user.userAge}</h1>
</body>
</html>

3.  工程测试

项目启动如图所示:

SpringMVC 拦截器 工程实例(IntelliJ IDEA)_spring_02

3.1  输入 用户名: 1 , 用户年龄:1, 这个将被 拦截器 1 拦截

SpringMVC 拦截器 工程实例(IntelliJ IDEA)_spring_03

SpringMVC 拦截器 工程实例(IntelliJ IDEA)_xml_04

3.2  输入 用户名: syrdbt , 用户年龄:1, 这个将被 拦截器 2 拦截

SpringMVC 拦截器 工程实例(IntelliJ IDEA)_mvc_05

SpringMVC 拦截器 工程实例(IntelliJ IDEA)_xml_06

3.3 一个成功的样例,用户名: syrdbt , 用户年龄:3

SpringMVC 拦截器 工程实例(IntelliJ IDEA)_xml_07

SpringMVC 拦截器 工程实例(IntelliJ IDEA)_spring_08

END。