<!-- 傳統配置 -->
<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>
<!-- 註解配置 -->
<!-- 攔截器 -->
<mvc:interceptors>
<!-- 多個攔截器,順序執行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 若是不配置或/*,將攔截全部的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- java代碼 -->
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================");
}
}
<!-- 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"
xmlns:util="
http://www.springframework.org/schema/util"
xsi:schemaLocation="
<!-- 默認的註解映射的支持 ,它會自動註冊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>
<!--一個攔截器多個mapping path的配置-->
<mvc:interceptor>
<mvc:mapping path="/ads/plan/channel" />
<mvc:mapping path="/ads/plan/keyword" />
<mvc:mapping path="/ads/plan/wordAdd" />
<mvc:mapping path="/ads/plan/save" />
<ref bean="planAgreementInterceptor" />
</mvc:interceptor>
<!——設置spring攔截器若mvc:mapping的path相同則按照配置前後造成攔截器鏈 ——>
<mvc:interceptors> <mvc:interceptor>
<mvc:mapping path="/*" />
<bean class="test.interceptor.TestInterceptor1" />
</mvc:interceptor> <mvc:interceptor>
<mvc:mapping path="/*" />
<bean class="test.interceptor.TestInterceptor2" />
</mvc:interceptor>
</mvc:interceptors>
|