天天看點

spring mvc xml配置攔截器

公司要求使用xml方式的,其實在我看來注解更友善;

如何使用xml配置spring mvc的攔截器呢?

場景:比如使用者通過浏覽器通路我的網站時,我需要判斷使用者是否已經登入過,若登入過,則允許通路,否則自動跳轉到登陸頁面。

spring mvc中攔截器類需要繼承handlerinterceptoradapter 類

代碼如下:

spring mvc xml配置攔截器

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,就請求不會往下傳遞,就會拒絕請求。是以該方法可用于進行通路控制。

控制器代碼如下:

spring mvc xml配置攔截器

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

spring mvc 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配置如下 :

spring mvc 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内容:

spring mvc 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

項目結構:

spring mvc xml配置攔截器

繼續閱讀