Yes, there are two approaches. We can include other struts.xml file from a bootstrap, or we can place multiple struts.xml files on the classpath. Or both.

Including

A typical struts.xml files will have one or more include elements:

<struts>
    <include file="struts-default.xml"/>
    <include file="config-browser.xml"/>
    <package name="default" extends="struts-default">
....
    </package>
    <include file="other.xml"/>
</struts>

The first include element tells the framework to load the struts-default.xml, which it wil find in the struts2.jar file. The struts-default.xml file defines the "standard" interceptor and result definitions.

You can put your own <include> elements in your struts.xml interchangeably with <package> elements. They configuration objects will be loaded order of appearance. The framework reads the configuration from top to bottom and adds objects as they are referenced.

@see com.opensymphony.xwork.config.ConfigurationManager
@see com.opensymphony.xwork.config.Configuration
@see com.opensymphony.xwork.config.impl.DefaultConfiguration
@see com.opensymphony.xwork.config.ConfigurationProvider
@see com.opensymphony.xwork.config.providers.XmlConfigurationProvider

Classpathing

A "modular" application may have several struts.xml files placed in various packages on the classpath.

At startup, the framework will search down the classpath for struts.xml files and load each one, honoring any include statements.