拦截器之拦截控制器里面的方法;
第一步:编写拦截器类,必须实现HandlerInterceptor接口;
第二步:配置拦截器;
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;
}
}
<?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>
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";
}
}
<%--
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>
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;
}
}
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;
}
}
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执行了!");
}
}
后处理方法也能进行各种操作(比如跳转页面);
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执行了!");
}
}
无法跳转页面了!