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>