`

struts2配置多个文件

阅读更多

在struts2中配置多个配置文件的方法很多,常见的几种为:

 

 

1.由于struts2默认会加载class下的中的struts.xml文件,所以可以采用了include方法将其他的配置文件包含进来,其中include包含可以支持正则表达式。

<include file="struts/struts-*.xml"></include>

 

2.第二种方法采用的是才web.xml中配置struts配置文件,具体如下:

 

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  <init-param>
       <param-name>config</param-name>
        <param-value>struts-default.xml,struts-plugin.xml,/WEB-INF/struts.xml,/WEB-INF/strtus/struts-conf/struts-*.xml</param-value>
     </init-param>  
 </filter>

 

3.第三种方法可以继承StrutsPrepareAndExecuteFilter重写init方法.

1.public class StrutsInitPrepareAndExecuteFilter extends
  StrutsPrepareAndExecuteFilter {

 public void init(FilterConfig filterConfig) throws ServletException {
  StrutsInitOperations init = new StrutsInitOperations();
  FilterHostConfig config = new FilterHostConfig(filterConfig);
  init.initLogging(config);
  Dispatcher dispatcher = init.initDispatcher(config);
  init.initStaticContentLoader(config, dispatcher);
  prepare = new PrepareOperations(filterConfig.getServletContext(),
    dispatcher);
  execute = new ExecuteOperations(filterConfig.getServletContext(),
    dispatcher);
  excludedPatterns = init.buildExcludedPatternsList(dispatcher);
  postInit(dispatcher, filterConfig);
  init.cleanup();
 }

}

 

2.StrutsInitOperations继承InitOperations类中的createDispatcher方法

 

public Dispatcher initDispatcher(HostConfig filterConfig) {
  Dispatcher dispatcher = createDispatcher(filterConfig);
  dispatcher.init();
  return dispatcher;
 }

 @SuppressWarnings({ "rawtypes", "unchecked" })
 private Dispatcher createDispatcher(HostConfig filterConfig) {
  Map params = new HashMap();
  String name;
  String value;
  for (Iterator e = filterConfig.getInitParameterNames(); e.hasNext(); params
    .put(name, value)) {
   name = (String) e.next();
   value = filterConfig.getInitParameter(name);
  }
  return new TestDispatcher(filterConfig.getServletContext(), params);
 }

 

3.其中的TestDispatcher集成的是Dispatcher,我们可以在init方法中添加相应的加载xml方法

private void init_XmlConfigurations()
 {
  String realPath = this.servletContext.getRealPath("/");
  String configDir = this.initParams.get(“configDir”);
  if (configDir == null)
  {
   configDir = java.io.File.separator;
   configDir = realPath + configDir;
  }

  String configFilenamePattern = this.initParams
    .get("configFilenamePattern");
  if (configFilenamePattern == null)
  {
   configFilenamePattern = "struts*.xml";
  }

  this.getConfigurationManager().addConfigurationProvider(
    new TestConfigurationProvider(configDir, configFilenamePattern,
      false, servletContext));
 }

 

public void  init()

{

   ....

   init_XmlConfigurations();

   ....

}

 

4.TestConfigurationProvider 集成的是StrutsXmlConfigurationProvider,重写getConfigurationUrls方法

 

public TestConfigurationProvider (String baseDir, String filenamePattern,
   boolean errorIfMissing, ServletContext servletContext)
 {
  super(filenamePattern, errorIfMissing, servletContext);
  if (baseDir != null)
  {
   this.baseDir = new File(baseDir);
  }


  this.filenamePattern = filenamePattern;
  this.servletContext = servletContext;
 }

 

 @Override
 protected URL findInFileSystem(String fileName) throws IOException
 {
  URL url = null;
  File file = new File(fileName);

  if (!file.exists())
  {
   file = new File(baseDir, fileName);
  }
  if (file.exists())
  {
   try
   {
    url = file.toURL();
   }
   catch (MalformedURLException e)
   {
    throw new IOException("Unable to convert " + file + " to a URL");
   }
  }
  return url;
 }

 /*
 @Override
 protected Iterator<URL> getConfigurationUrls(String filenamePattern)
   throws IOException
 {
  List<URL> list = new ArrayList<URL>();
  URL url = null;
  if (this.baseDir != null && this.baseDir.exists()
    && this.baseDir.isDirectory())
  {
   String[] struts2Files = baseDir.list(new TestStruts2FilenameFilter(
     filenamePattern));
   for (String fileName : struts2Files)
   {
    url = findInFileSystem(fileName);
    if (url == null)
    {
     return super.getConfigurationUrls(fileName);
    }
    else
    {
     list.add(url);
    }
   }
  }
  return list.iterator();
 }

5.编写一个文件名称的匹配类TestStruts2FilenameFilter

 private String pattern;
 private List<Pattern> rules =new ArrayList();;
  public MostStruts2FilenameFilter(String pattern)
 {
  if (pattern == null || pattern.length() == 0)
  {
   this.pattern ="*.xml";
  }
  else
  {
   this.pattern = pattern;
  }
  String[] as = this.pattern.split("[ ,;]+");
  for (int i = 0; i < as.length; i++)
  {
   if (as[i].length() > 0)
   {
    String regx = as[i].replaceAll("\\*", "(\\\\S)*");
    rules.add(Pattern.compile(regx,
      Pattern.CASE_INSENSITIVE));
   }
  }
 }

 

 public boolean accept(File dir, String filename)
 {
  boolean flag = false;
  for (int i = 0; !flag && i < rules.size(); i++)
  {
   Pattern patternrule = (Pattern) rules.get(i);
   flag = patternrule.matcher(filename).matches();
  }
  return flag;
 }

 

这样我们就完成了动态配置struts配置文件的,从而实现了struts配置多个文件。

分享到:
评论

相关推荐

    ·Struts2配置文件介绍 超级详细

    在Struts2框架中,有多个重要的配置文件用于控制应用的行为与结构,其中最核心的是`struts.xml`文件。此外还包括`web.xml`、`struts.properties`、`struts-default.xml`等。 - **web.xml**:它是Web应用的部署描述...

    struts2配置文件

    在Struts2中,配置文件主要分为两个部分:`struts-default.xml`和用户自定义的配置文件,如`struts.xml`或`struts-config.xml`。这些XML文件定义了Action、结果类型、拦截器和包等元素,从而控制应用程序的行为。 *...

    Struts2多个文件上传

    总的来说,Struts2的多文件上传通过引入Apache Commons库,提供了简洁的API和配置,使得开发者能轻松处理用户上传的多个文件。无论是使用List集合还是数组,核心原理都是相同的,只是接收上传文件的对象类型不同。...

    struts2 为应用指定多个配置文件.rar

    因此,将配置分散到多个文件中可以提高代码的可读性和可维护性。 1. **多配置文件的引入**:要使用多个配置文件,你需要在`struts.xml`(或你自定义的主配置文件)中通过`&lt;include&gt;`标签导入其他配置文件。例如: ...

    struts2配置文件加载顺序

    2. **struts-plugin.xml**:这个文件用于配置Struts2插件。每个插件都会有自己的`struts-plugin.xml`,这些文件通常位于各个插件的JAR包内部。插件可以扩展Struts2的功能,如ognl、tiles等。 3. **struts....

    struts2配置文件详细说明

    这个文件遵循特定的DTD(文档类型定义),如`struts-2.0.dtd`,确保其结构的正确性。 2. **常量配置**: `&lt;constant&gt;`元素用于定义配置文件中的全局常量,它们是Struts2的行为配置。例如: - `struts.i18n....

    多个struts配置文件使用

    ### 二、配置多个Struts配置文件 #### 2.1 配置文件的作用 Struts配置文件(通常是`.xml`文件)包含了应用程序的配置信息,比如Action映射、Form Bean定义等。通过将这些配置分散到多个文件中,可以使项目更加模块...

    struts2核心配置文件

    ### Struts2核心配置文件详解 #### 一、概述 Struts2框架是Java Web...合理地配置这两个文件,可以使Struts2应用程序更加灵活和高效。开发者可以根据项目的具体需求,灵活地调整这些配置,从而更好地满足业务需求。

    struts2配置文件改变位置问题

    这里,`config`参数值包含了多个配置文件的路径,包括默认的`struts-default.xml`和`struts-plugin.xml`,以及自定义的`../struts.xml`。`../struts.xml`表示相对于`WEB-INF/classes`目录的上一级目录,这样就指定了...

    Struts2的配置文件的详细说明

    Struts2是一个强大的MVC框架,它通过提供配置文件来管理应用程序的行为,使得开发者能够灵活地定义Action、拦截器和结果映射。本文将深入探讨Struts2的配置文件,特别是`struts.xml`文件中的关键元素和属性。 在...

    struts2实现的多个文件上传

    下面将详细阐述如何使用Struts2来实现多个文件的上传。 首先,理解文件上传的基本原理。在HTTP协议中,文件上传通常通过multipart/form-data编码类型来实现。这种编码方式将表单数据分割成多个部分,每部分包含一个...

    SSH笔记_Struts2配置

    总结,Struts2配置涉及多个方面,包括核心库的引入、配置文件的编写、Action、Result、Interceptor的定义以及与Spring的整合等。通过合理配置,可以构建出高效、灵活的Web应用。在实际项目中,应根据需求调整和优化...

    Struts2配置详解

    例如,可以在一个文件中专门定义Action相关的配置,在另一个文件中则可以定义拦截器等其他配置。 这种做法不仅可以让配置更加清晰,也方便后期维护和扩展。可以通过`&lt;include&gt;`标签来包含这些独立的配置文件,例如...

    struts2 jar包及配置文件

    5. **struts2-plugins.jar**:这个文件可能包含了一些预装的插件,如 strut2-dojo-plugin 和 strut2-json-plugin,它们提供了额外的功能,如Dojo工具库支持或JSON序列化。 配置文件在Struts2中起着至关重要的作用,...

    struts2配置文件详解

    Struts2框架的配置主要通过多个XML文件来实现,这些配置文件定义了应用程序的行为和结构。本文将详细介绍Struts2配置文件中的各个节点及其作用,并为初学者提供深入的理解。 #### 二、Struts2配置文件概览 Struts2...

    struts配置的文件 连接池 mysql等配置文件

    10. **国际化支持**:Struts2支持多语言,可以通过配置资源文件来实现。在`struts.properties`或`struts.xml`中指定资源文件的路径。 以上就是关于Struts2配置文件的详细讲解,包括核心配置文件`struts.xml`的使用...

    struts1多模块多配置文件

    ### Struts1多模块多配置文件的开发流程详解 #### 一、引言 在大型项目的开发过程中,为了更好地组织代码结构,提高系统的可维护性和扩展性,通常会采用多模块的设计模式。对于使用Struts1框架进行开发的项目而言,...

    MVC架构,struts详细配置,多个struts配置文件,Action的调用方式

    **多个Struts配置文件**: Struts2支持多个配置文件,可以通过`&lt;include&gt;`标签来导入其他配置文件,这样可以使配置更加模块化,方便管理和维护。 **Action的调用方式**: Struts2支持基于注解的Action配置,可以...

    一个简单的struts2的手动配置

    手动配置Struts2涉及多个步骤,下面我们将深入探讨这个过程。 首先,我们需要在项目的类路径下添加Struts2的核心库。这通常包括`struts2-core`、`struts2-convention-plugin`、`struts2-json-plugin`等依赖,它们...

Global site tag (gtag.js) - Google Analytics