springmvc拦截器
《一》编写一个简单的拦截器
提醒:为了不影响阅读,环境配置文件在文章结尾;
package com.yk.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 FirstInterceptor implements HandlerInterceptor { /** *前置增强的方法:preHandle * 方法参数: * request:请求对象 * response:响应对象 * handler:目标处理器方法(HandlerMethod) */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("拦截器1:FistInterceptor------前置增强方法:preHandle执行中"); return true; } /** *后置增强的方法:postHandle * 方法参数: * request:请求对象 * response:响应对象 * handler:目标处理器方法(HandlerMethod) * mav:模型和视图 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav) throws Exception { System.out.println("拦截器1:FirstInterceptor-----后置增强方法:postHandle执行中"); mav.addObject("message","拦截器postHandle"); } /** *后置增强的方法:afterCompletion * 方法参数: * request:请求对象 * response:响应对象 * handler:目标处理器方法(HandlerMethod) * ex:异常对象 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("拦截器1:FirstInterceptor---------后置增强方法:afterCompletion执行中"); } }
<?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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.yk.controller"></context:component-scan> <mvc:annotation-driven></mvc:annotation-driven> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 配置拦截器--> <mvc:interceptors> <!-- 拦截器1--> <mvc:interceptor> <!--拦截器拦截url规则,说明: 1.拦截单个url:/interceptor.do,拦截请求/interceptor.do 2.拦截多个url:/inter/**,拦截以/inter开头的所有请求 --> <mvc:mapping path="/interceptor.do"/> <!-- 拦截器bean--> <bean class="com.yk.interceptor.FirstInterceptor"/> </mvc:interceptor> <!-- 拦截器2--> <!-- <mvc:interceptor>--> <!-- <mvc:mapping path="/interceptor.do"/>--> <!-- <bean class="com.yk.interceptor.secondInterceptor"/>--> <!-- </mvc:interceptor>--> </mvc:interceptors> </beans>
package com.yk.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class InterceptorController { @RequestMapping("/interceptor.do") public String testInterceptor(Model model) { System.out.println("InterceptorController------方法testInterceptor执行中"); model.addAttribute("message1", "处理器方法testInterceptor"); return "inter/interceptor"; } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>拦截器页面</title> </head> <body> <p>拦截器方法:${message }</p> <p>处理器方法:${message1 }</p> </body> </html>
#执行结果说明: 1.首先执行拦截器方法:preHandle 2.执行处理器方法:testInterceptor 3.执行拦截器方法:postHandle 4.响应jsp页面(在postHandle方法封装的模型数据,页面可以获取到) 5.执行拦截器方法:afterCompletion
idea控制台打印
#执行结果说明:
preHandle方法返回false。只执行了拦截器preHandle方法,后续流程终止执行
控制台打印
package com.yk.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 secondInterceptor implements HandlerInterceptor { /** *前置增强的方法:preHandle * 方法参数: * request:请求对象 * response:响应对象 * handler:目标处理器方法(HandlerMethod) */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("拦截器2:SecondInterceptor------前置增强方法:preHandle执行中"); return false; } /** *后置增强的方法:postHandle * 方法参数: * request:请求对象 * response:响应对象 * handler:目标处理器方法(HandlerMethod) * mav:模型和视图 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav) throws Exception { System.out.println("拦截器2:SecondInterceptor------前置增强方法:preHandle执行中"); } /** *后置增强的方法:afterCompletion * 方法参数: * request:请求对象 * response:响应对象 * handler:目标处理器方法(HandlerMethod) * ex:异常对象 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("拦截器2:SecondInterceptor------前置增强方法:preHandle执行中"); } }
<!-- 配置拦截器--> <mvc:interceptors> <!-- 拦截器1--> <mvc:interceptor> <!--拦截器拦截url规则,说明: 1.拦截单个url:/interceptor.do,拦截请求/interceptor.do 2.拦截多个url:/inter/**,拦截以/inter开头的所有请求 --> <mvc:mapping path="/interceptor.do"/> <!-- 拦截器bean--> <bean class="com.yk.interceptor.FirstInterceptor"/> </mvc:interceptor> <!-- 拦截器2--> <mvc:interceptor> <mvc:mapping path="/interceptor.do"/> <bean class="com.yk.interceptor.secondInterceptor"/> </mvc:interceptor> </mvc:interceptors>
环境配置:
创建javaWEB maven项目
springmvc.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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.yk.controller"></context:component-scan> <mvc:annotation-driven></mvc:annotation-driven> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 配置拦截器--> <mvc:interceptors> <!-- 拦截器1--> <mvc:interceptor> <!--拦截器拦截url规则,说明: 1.拦截单个url:/interceptor.do,拦截请求/interceptor.do 2.拦截多个url:/inter/**,拦截以/inter开头的所有请求 --> <mvc:mapping path="/interceptor.do"/> <!-- 拦截器bean--> <bean class="com.yk.interceptor.FirstInterceptor"/> </mvc:interceptor> <!-- 拦截器2--> <mvc:interceptor> <mvc:mapping path="/interceptor.do"/> <bean class="com.yk.interceptor.secondInterceptor"/> </mvc:interceptor> </mvc:interceptors> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- 配置前端控制器:DispatcherServlet --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 加载springmvc主配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- 配置请求url规则,说明: 1.*.do,表示以.do结尾的请求进入前端控制器 <url-pattern>*.do</url-pattern> 2./,表示所有请求都进入前端控制器 --> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--______________________________________________________________ --> <!-- 字符集编码过滤器--> <filter> <filter-name>encodingFilter</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>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yk</groupId> <artifactId>TestSpringMVC</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <!-- spring版本 --> <spring.version>5.0.2.RELEASE</spring.version> <!--servlet版本--> <servlet.version>2.5</servlet.version> <!--jsp版本--> <jsp.version>2.0</jsp.version> <!-- json--> <jackson.version>2.9.0</jackson.version> </properties> <!-- webmvc依赖--> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.2.RELEASE</version> <scope>compile</scope> </dependency> <!--servlet依赖--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet.version}</version> <scope>provided</scope> </dependency> <!--jsp依赖--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>${jsp.version}</version> <scope>provided</scope> </dependency> <!--spring ioc依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> <scope>compile</scope> </dependency> <!--jackson依赖包--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> </dependencies> <build> <finalName>SpringMVC_demo1</finalName> <!--配置插件--> <plugins> <!--maven tomcat插件--> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <!-- tomcat 的端口号 --> <port>8080</port> <!-- 访问应用的路径 --> <path>/param</path> <!-- URL按UTF-8进行编码,解决中文参数乱码 --> <uriEncoding>UTF-8</uriEncoding> <!-- tomcat名称 --> <server>tomcat7</server> </configuration> </plugin> </plugins> </build> </project>