1、攔截器的配置html
一、傳統的配置java
xml代碼web
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" > <property name="interceptors"> <!-- 多個攔截器,順序執行 --> <list> <ref bean="commonInterceptor"/> </list> </property> </bean> <!-- 若是不定義mappingURL,則默認攔截全部對Controller的請求 ; 可使用正則表達式對url進行匹配,從而更細粒度的進行攔截(.*/entryOrJsonController\.do\?action=reg.*); --> <bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor"> <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/> </bean>
二、基於註解的配置正則表達式
xml代碼spring
<!-- 攔截器 --> <mvc:interceptors> <!-- 多個攔截器,順序執行 --> <mvc:interceptor> <mvc:mapping path="/entryOrJsonController/*" /><!-- 若是不配置或/*,將攔截全部的Controller --> <bean class="com.wy.interceptor.CommonInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
2、攔截器類apache
java代碼json
package com.wy.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class CommonInterceptor implements HandlerInterceptor { private Logger log = Logger.getLogger(CommonInterceptor.class); public CommonInterceptor() { // TODO Auto-generated constructor stub } private String mappingURL;//利用正則映射到須要攔截的路徑 public void setMappingURL(String mappingURL) { this.mappingURL = mappingURL; } /** * 在業務處理器處理請求以前被調用 * 若是返回false * 從當前的攔截器往回執行全部攔截器的afterCompletion(),再退出攔截器鏈 * * 若是返回true * 執行下一個攔截器,直到全部的攔截器都執行完畢 * 再執行被攔截的Controller * 而後進入攔截器鏈, * 從最後一個攔截器往回執行全部的postHandle() * 接着再從最後一個攔截器往回執行全部的afterCompletion() */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub log.info("==============執行順序: 一、preHandle================"); String url=request.getRequestURL().toString(); if(mappingURL==null || url.matches(mappingURL)){ request.getRequestDispatcher("/msg.jsp").forward(request, response); return false; } return true; } //在業務處理器處理請求執行完成後,生成視圖以前執行的動做 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub log.info("==============執行順序: 二、postHandle================"); } /** * 在DispatcherServlet徹底處理完請求後被調用 * * 當有攔截器拋出異常時,會從當前攔截器往回執行全部的攔截器的afterCompletion() */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub log.info("==============執行順序: 三、afterCompletion================"); } }
注意:註釋中的說明。spring-mvc
完整的spring配置文件mvc
java代碼app
<?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" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> <!-- 默認的註解映射的支持 ,它會自動註冊DefaultAnnotationHandlerMapping 與AnnotationMethodHandlerAdapter <mvc:annotation-driven /> --> <!-- 配置靜態資源,直接映射到對應的文件夾,不被DispatcherServlet處理,3.04新增功能,須要從新設置spring-mvc-3.0.xsd --> <mvc:resources mapping="/js/**" location="/js/" /> <!-- 自動掃描註解的Controller --> <context:component-scan base-package="com.wy.controller.annotation" /> <!-- 處理在類級別上的@RequestMapping註解--> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" > <property name="interceptors"> <!-- 多個攔截器,順序執行 --> <list> <ref bean="commonInterceptor"/> </list> </property> </bean> <!-- 若是不定義mappingURL,則默認攔截全部對Controller的請求 ; 可使用正則表達式對url進行匹配,從而更細粒度的進行攔截(.*/entryOrJsonController\.do\?action=reg.*); --> <bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor"> <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/> </bean> <!-- 處理方法級別上的@RequestMapping註解--> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > <property name="messageConverters"> <util:list id="beanList"> <ref bean="mappingJacksonHttpMessageConverter"/> </util:list> </property> </bean> <!-- 將指定路徑的請求直接轉到對應的view上,而不須要特定的controller來處理請求 . 注意:此處的映射路徑是/hello,請求時http://localhost:8080/SpringMVC/hello 不能在hello.xxx,而不使用此種方式的映射能夠加的,由於web.xml配置的是‘/’ --> <mvc:view-controller path="/hello" view-name="hello" /> <!-- 視圖解析器策略 和 視圖解析器 --> <!-- 對JSTL提供良好的支持 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 默認的viewClass,能夠不用配置 <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" /> --> <property name="prefix" value="/WEB-INF/page/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 處理JSON數據轉換的 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <!-- 爲了處理返回的JSON數據的編碼,默認是ISO-88859-1的,這裏把它設置爲UTF-8,解決有亂碼的狀況 --> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 攔截器 --> <mvc:interceptors> <!-- 多個攔截器,順序執行 --> <mvc:interceptor> <mvc:mapping path="/entryOrJsonController/*" /><!-- 若是不配置或/*,將攔截全部的Controller --> <bean class="com.wy.interceptor.CommonInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> <!-- ResourceBundleViewResolver經過basename所指定的ResourceBundle解析視圖名。 對每一個待解析的視圖,ResourceBundle裏的[視圖名].class所對應的值就是實現該視圖的類。 一樣,[視圖名].url所對應的值是該視圖所對應的URL。 能夠指定一個parent view,其它的視圖均可以從parent view擴展。 用這種方法,能夠聲明一個默認的視圖。 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="welcome" /> </bean> --> </beans>