19 SpringMVC interceptor

1. Overview of the interceptor
(1) SpringMVC frame for interceptor processor for preprocessing and post processing techniques .
(2) may be defined interceptor chain, is connected to the chain interceptor pressing a certain sequence to form a chain, when the access methods are intercepted, the interceptor chain interceptor performs pressing a defined sequence.
(3) to intercept and filter functions similar comparison, there are differences
  1. Filter Servlet specification is part of the frame can use any filter technique.
  2. interceptor SpringMVC framework is unique .
  3. The filter configuration of / *, can intercept any resources.
  4. The controller will only interceptor to intercept method.
(4) interceptor is an implementation of AOP thought
(5) interceptor want to customize, implement HandlerInterceptor interface.

2. interceptor use case

Principle (1) interceptor

(2) project structure

(3) the important part of the code

<1>web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--配置前端控制器,让前端控制器去加载resources包下的springmvc.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:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!--配置解决中文乱码的过滤器-->
  <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>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


</web-app>

<2>控制器类

package lucky.controller;

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

@Controller
@RequestMapping(path = "/user")
public class UserController {
    @RequestMapping(path = "/testInterceptor")
    public String testInterceptor(){
        System.out.println("testInterceptor执行了");
        return "success";
    }
}

<3>拦截器类

package lucky.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 MyInterceptor1 implements HandlerInterceptor {
    /**
     * 预处理:该方法controller包下控制器类方法之前执行
     * @return  true 表示放行,执行下一个拦截器,如果没有下一个拦截器,则执行控制器类中方法
     *          false 表示不放行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor1 执行了---前");
        return true;
    }

    /**
     * 后处理:该方法在controller包下控制器类方法之后执行,但在success.jsp执行之前
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor1 执行了---后");
    }
}

<4>springmvc

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       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
        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="lucky"/>

    <!-- 视图解析器对象 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置控制器方法中return返回的字符串对应的同名文件所在目录-->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <!--配置文件的后缀名-->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 开启SpringMVC框架注解的支持 -->
    <mvc:annotation-driven/>

    <!--配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--要拦截的方法-->
            <mvc:mapping path="/user/*"/>
            <!--配置拦截器对象-->
            <bean class="lucky.interceptor.MyInterceptor1"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

</beans>

控制台输出:

Guess you like

Origin www.cnblogs.com/luckyplj/p/11354731.html