在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框架中,有多个重要的配置文件用于控制应用的行为与结构,其中最核心的是`struts.xml`文件。此外还包括`web.xml`、`struts.properties`、`struts-default.xml`等。 - **web.xml**:它是Web应用的部署描述...
在Struts2中,配置文件主要分为两个部分:`struts-default.xml`和用户自定义的配置文件,如`struts.xml`或`struts-config.xml`。这些XML文件定义了Action、结果类型、拦截器和包等元素,从而控制应用程序的行为。 *...
总的来说,Struts2的多文件上传通过引入Apache Commons库,提供了简洁的API和配置,使得开发者能轻松处理用户上传的多个文件。无论是使用List集合还是数组,核心原理都是相同的,只是接收上传文件的对象类型不同。...
因此,将配置分散到多个文件中可以提高代码的可读性和可维护性。 1. **多配置文件的引入**:要使用多个配置文件,你需要在`struts.xml`(或你自定义的主配置文件)中通过`<include>`标签导入其他配置文件。例如: ...
2. **struts-plugin.xml**:这个文件用于配置Struts2插件。每个插件都会有自己的`struts-plugin.xml`,这些文件通常位于各个插件的JAR包内部。插件可以扩展Struts2的功能,如ognl、tiles等。 3. **struts....
这个文件遵循特定的DTD(文档类型定义),如`struts-2.0.dtd`,确保其结构的正确性。 2. **常量配置**: `<constant>`元素用于定义配置文件中的全局常量,它们是Struts2的行为配置。例如: - `struts.i18n....
### 二、配置多个Struts配置文件 #### 2.1 配置文件的作用 Struts配置文件(通常是`.xml`文件)包含了应用程序的配置信息,比如Action映射、Form Bean定义等。通过将这些配置分散到多个文件中,可以使项目更加模块...
### Struts2核心配置文件详解 #### 一、概述 Struts2框架是Java Web...合理地配置这两个文件,可以使Struts2应用程序更加灵活和高效。开发者可以根据项目的具体需求,灵活地调整这些配置,从而更好地满足业务需求。
这里,`config`参数值包含了多个配置文件的路径,包括默认的`struts-default.xml`和`struts-plugin.xml`,以及自定义的`../struts.xml`。`../struts.xml`表示相对于`WEB-INF/classes`目录的上一级目录,这样就指定了...
Struts2是一个强大的MVC框架,它通过提供配置文件来管理应用程序的行为,使得开发者能够灵活地定义Action、拦截器和结果映射。本文将深入探讨Struts2的配置文件,特别是`struts.xml`文件中的关键元素和属性。 在...
下面将详细阐述如何使用Struts2来实现多个文件的上传。 首先,理解文件上传的基本原理。在HTTP协议中,文件上传通常通过multipart/form-data编码类型来实现。这种编码方式将表单数据分割成多个部分,每部分包含一个...
总结,Struts2配置涉及多个方面,包括核心库的引入、配置文件的编写、Action、Result、Interceptor的定义以及与Spring的整合等。通过合理配置,可以构建出高效、灵活的Web应用。在实际项目中,应根据需求调整和优化...
例如,可以在一个文件中专门定义Action相关的配置,在另一个文件中则可以定义拦截器等其他配置。 这种做法不仅可以让配置更加清晰,也方便后期维护和扩展。可以通过`<include>`标签来包含这些独立的配置文件,例如...
5. **struts2-plugins.jar**:这个文件可能包含了一些预装的插件,如 strut2-dojo-plugin 和 strut2-json-plugin,它们提供了额外的功能,如Dojo工具库支持或JSON序列化。 配置文件在Struts2中起着至关重要的作用,...
Struts2框架的配置主要通过多个XML文件来实现,这些配置文件定义了应用程序的行为和结构。本文将详细介绍Struts2配置文件中的各个节点及其作用,并为初学者提供深入的理解。 #### 二、Struts2配置文件概览 Struts2...
10. **国际化支持**:Struts2支持多语言,可以通过配置资源文件来实现。在`struts.properties`或`struts.xml`中指定资源文件的路径。 以上就是关于Struts2配置文件的详细讲解,包括核心配置文件`struts.xml`的使用...
### Struts1多模块多配置文件的开发流程详解 #### 一、引言 在大型项目的开发过程中,为了更好地组织代码结构,提高系统的可维护性和扩展性,通常会采用多模块的设计模式。对于使用Struts1框架进行开发的项目而言,...
**多个Struts配置文件**: Struts2支持多个配置文件,可以通过`<include>`标签来导入其他配置文件,这样可以使配置更加模块化,方便管理和维护。 **Action的调用方式**: Struts2支持基于注解的Action配置,可以...
手动配置Struts2涉及多个步骤,下面我们将深入探讨这个过程。 首先,我们需要在项目的类路径下添加Struts2的核心库。这通常包括`struts2-core`、`struts2-convention-plugin`、`struts2-json-plugin`等依赖,它们...