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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值