首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts2 一次性加载全部配置文件工具类

2012-08-29 
Struts2 一次性加载所有配置文件工具类???? ?相信大家在做项目的时候都遇到一个问题就是配置文件,模块越多

Struts2 一次性加载所有配置文件工具类

???? ?相信大家在做项目的时候都遇到一个问题就是配置文件,模块越多配置的Action也会因此增加很多,所以有的开发人员采用了Struts提供的include标签在一个xml文件引入许多其他模块的配置文件,但是在用SVN的时候,团队中开发也不是很方便,有的人员采用配置config参数,但是哪么多配置文件也是个麻烦问题。要想Struts像Spring一样通过表达式来加载配置文件,是可以的,下面贴上源码:

package com.dt.his.webcnter.util;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
import com.opensymphony.xwork2.inject.ContainerBuilder;
import com.opensymphony.xwork2.util.location.LocatableProperties;

public class CutomConfigurationProvider extends XmlConfigurationProvider {
??? //需要解析加载的文件路径
?private static final String FILE_PATTERN = "classpath*:config/**/struts_*.xml";

?public CutomConfigurationProvider() {
??Map<String, String> mappings = new HashMap<String, String>();
??mappings.put("-//OpenSymphony Group//XWork 2.1.3//EN",
????"xwork-2.1.3.dtd");
??mappings.put("-//OpenSymphony Group//XWork 2.1//EN", "xwork-2.1.dtd");
??mappings.put("-//OpenSymphony Group//XWork 2.0//EN", "xwork-2.0.dtd");
??mappings.put("-//OpenSymphony Group//XWork 1.1.1//EN",
????"xwork-1.1.1.dtd");
??mappings.put("-//OpenSymphony Group//XWork 1.1//EN", "xwork-1.1.dtd");
??mappings.put("-//OpenSymphony Group//XWork 1.0//EN", "xwork-1.0.dtd");
??mappings
????.put(
??????"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN",
??????"struts-2.0.dtd");
??mappings
????.put(
??????"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN",
??????"struts-2.1.dtd");
??mappings
????.put(
??????"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN",
??????"struts-2.1.7.dtd");
??setDtdMappings(mappings);

?}

?/**
? * (non-Javadoc)
? *
? * @see com.opensymphony.xwork2.config.ContainerProvider#needsReload()
? */
?@Override
?public boolean needsReload() {
??return true;
?}

?/*
? * (non-Javadoc)
? *
? * @see com.opensymphony.xwork2.config.ContainerProvider#register(com.opensymphony.xwork2.inject.ContainerBuilder,
? *????? com.opensymphony.xwork2.util.location.LocatableProperties)
? */
?@Override
?public void register(ContainerBuilder containerBuilder,
???LocatableProperties props) throws ConfigurationException {
??super.register(containerBuilder, props);
?}

?/*
? * (non-Javadoc)
? *
? * @see com.opensymphony.xwork2.config.PackageProvider#loadPackages()
? */
?@Override
?public void loadPackages() throws ConfigurationException {
??super.loadPackages();
?}

?@Override
?protected Iterator<URL> getConfigurationUrls(String fileName)
???throws IOException {
??List<URL> urls = new ArrayList<URL>();
??Resource[] resources = getAllResourcesUrl();
??for (Resource resource : resources) {
???urls.add(resource.getURL());
??}

??return urls.iterator();
?}

?/**
? * 获取系统中需要搜寻的struts的配置
? *
? * @return
? * @throws IOException
? */
?private Resource[] getAllResourcesUrl() {
??ResourcePatternResolver resoler = new PathMatchingResourcePatternResolver();
??try {
???return resoler.getResources(FILE_PATTERN);
??} catch (IOException e) {
???e.printStackTrace();
??}
??return new Resource[0];
?}
}

在web.xml中配置如下:

?? <!-- 配置Struts过滤器 -->
?<filter>
??<filter-name>struts2</filter-name>
??<filter-class>
???org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
??</filter-class>
??<init-param>
???<param-name>configProviders</param-name>
???<param-value>
????com.dt.his.webcnter.util.CutomConfigurationProvider
???</param-value>
??</init-param>
?</filter>
?<filter-mapping>
??<filter-name>struts2</filter-name>
??<url-pattern>/*</url-pattern>
?</filter-mapping>

热点排行