web.xml 中以編碼方式添加filter並設定初始化參數AbstractAnnotationConfigDispatchServletInitializer

來源:互聯網
上載者:User

標籤:commons   for   mvc   test   []   vax   提交   path   介面   

web.xml中配置filter
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"     xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <display-name></display-name>   <filter>    <filter-name>testFilter</filter-name>    <filter-class>com.bolin.core.TestFilter.java</filter-class>    <init-param>        <param-name>specialUrl</param-name>        <param-value>            /login,/register        </param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>testFilter</filter-name>    <url-pattern>*.*</url-pattern>  </filter-mapping>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

 

假如有以下情境: 
testFilet的初始化參數specialUrl在開發環境,測試環境和生產環境中有所區別,那麼在系統提交測試,或者上線前必須要先修改web.xml,這樣的話就會比較繁瑣,給系統升級或測試增加額外開銷。

這樣就出現一個需求,希望能在系統啟動時讀取不同環境的配置資訊來初始化web.xml,這個配置資訊可以是庫中的資料,或者固定的設定檔,最好這些配置資訊能夠一勞永逸,相容開發環境,測試環境,生產環境,那以後就省事了。有一個開關去控制是什麼環境,那就讀取相應環境的配置資料。

編碼實現web.xml配置filter

那在這樣的需求下,web.xml就需要以編碼的方式來實現配置。spring4.0以上的版本支援web.xml的編碼配置。實現AbstractAnnotationConfigDispatcherServletInitializer介面,在servlet3.0中web.xml啟動時會檢測該介面實作類別,從能夠在實作類別中去配置filter。

package com.bolin.core;import java.io.IOException;import java.util.EnumSet;import java.util.Iterator;import java.util.Properties;import javax.servlet.DispatcherType;import javax.servlet.Filter;import javax.servlet.FilterRegistration;import javax.servlet.FilterRegistration.Dynamic;import javax.servlet.ServletContext;import javax.servlet.ServletException;import org.apache.commons.lang.StringUtils;import org.springframework.core.io.ClassPathResource;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{    @Override    protected Class<?>[] getRootConfigClasses() {        return null;    }    @Override    protected Class<?>[] getServletConfigClasses() {        return null;    }    @Override    protected String[] getServletMappings() {        return null;    }    @Override    public void onStartup(ServletContext servletContext)            throws ServletException {        // 系統啟動時註冊filter        FilterRegistration testFilter = servletContext.addFilter("testFilter", TestFilter.class);        // 設定init param, param可以從properties檔案中讀取或其他方式擷取,提供一個想法        testFilter.setInitParameter("specialUrl", "/login,/register");        testFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class) , true, "*.*");        super.onStartup(servletContext);    }    @Override    protected Dynamic registerServletFilter(ServletContext arg0, Filter filter) {        return super.registerServletFilter(arg0, filter);    }}

 

推薦一篇相同類型的部落格:xml零配置之AbstractAnnotationConfigDispatcherServletInitializer

需要注意的是以上的實現,依賴servlet-api-3.0.jar和spring-webmvc-4.0以上版本jar包。

web.xml 中以編碼方式添加filter並設定初始化參數AbstractAnnotationConfigDispatchServletInitializer

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.