標籤: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