公司要求使用xml方式的,其實在我看來注解更友善;
如何使用xml配置spring mvc的攔截器呢?
場景:比如使用者通過浏覽器通路我的網站時,我需要判斷使用者是否已經登入過,若登入過,則允許通路,否則自動跳轉到登陸頁面。
spring mvc中攔截器類需要繼承handlerinterceptoradapter 類
代碼如下:

package com.yj.mvc.controler.interceptor;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import org.springframework.web.servlet.modelandview;
import org.springframework.web.servlet.handler.handlerinterceptoradapter;
public class handlerinterceptor1 extends handlerinterceptoradapter {
@override
public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception {
system.out.println("===========handlerinterceptor1 prehandle");
return true;
}
public void posthandle(httpservletrequest request, httpservletresponse response, object handler, modelandview modelandview) throws exception {
system.out.println("===========handlerinterceptor1 posthandle");
public void aftercompletion(httpservletrequest request, httpservletresponse response, object handler, exception ex) throws exception {
system.out.println("===========handlerinterceptor1 aftercompletion");
}
比較重要的方法時prehandle,如果傳回false,就請求不會往下傳遞,就會拒絕請求。是以該方法可用于進行通路控制。
控制器代碼如下:

package com.yj.mvc.controler;
import java.util.hashmap;
import java.util.map;
import org.springframework.web.servlet.mvc.controller;
import org.springframework.web.servlet.view.json.mappingjacksonjsonview;
public class democontroller implements controller {
private string name;
private string age;
public modelandview handlerequest(httpservletrequest request,
httpservletresponse response) throws exception {
system.out.println("request.getrequesturl():"+request.getrequesturl());
system.out.println("request.getservletpath():"+request.getservletpath());
map root = new hashmap();
modelandview modelandview =new modelandview(new mappingjacksonjsonview(), root);
return modelandview;
}
public string getname() {
return name;
public void setname(string name) {
this.name = name;
public string getage() {
return age;
public void setage(string age) {
this.age = age;
spring mvc配置檔案:springmvc-servlet.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- handleradapter -->
<bean
class="org.springframework.web.servlet.mvc.simplecontrollerhandleradapter" />
<!-- viewresolver -->
class="org.springframework.web.servlet.view.internalresourceviewresolver">
<property name="viewclass"
value="org.springframework.web.servlet.view.jstlview" />
<property name="viewnames">
<list>
<value>org.springframework.web.servlet.view.json.mappingjacksonjsonview
</value>
</list>
</property>
</bean>
<mvc:resources mapping="/resource/**" location="/web-inf/resource/" />
</beans>
web.xml配置如下 :

<web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name></display-name>
<context-param>
<param-name>contextconfiglocation</param-name>
<param-value>
classpath:beans.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.contextloaderlistener</listener-class>
</listener>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
beans.xml内容:

http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"
default-lazy-init="false">
<!-- url映射清單,所有控制層controller的通路路徑在這裡定義 -->
<bean id="urlmapping"
class="org.springframework.web.servlet.handler.simpleurlhandlermapping">
<property name="mappings">
<props>
<prop key="demo.action">democontroller</prop>
<prop key="demo222.action">democontroller</prop>
</props>
<property name="interceptors">
<ref bean="handlerinterceptor2" />
<!-- 控制器的父類 -->
<bean id="democontroller" class="com.yj.mvc.controler.democontroller">
<!-- 系統業務參數 -->
<!-- <bean name="businessparamviewconf" class="com.tdr.otp.ats.conf.businessparamviewconf" -->
<!-- parent="basecontroller" > -->
<!-- <property name="businessparamviewservice"> -->
<!-- <ref bean="businessparamviewservice" /> -->
<!-- </property> -->
<!-- </bean> -->
<bean id="handlerinterceptor2" class="com.yj.mvc.controler.interceptor.handlerinterceptor1" />
啟動伺服器後,在浏覽器中通路:http://localhost:8080/springmvc_xml/demo.action
背景列印:
===========handlerinterceptor1 prehandle
request.getrequesturl():http://localhost:8080/springmvc_xml/demo.action
request.getservletpath():/demo.action
===========handlerinterceptor1 posthandle
===========handlerinterceptor1 aftercompletion
項目使用maven建構
ide:eclipse
項目結構: