struts2设置加载非默认路径的struts.xml文件解决方案

时间:2021-12-07 07:07:52

方案一:
  首先我们要明白struts2加载配置文件都是从它自己的jar包和\WEB-INF\classes两个默认的位置加载的,如果你想改变strusts2中的文件的默认加载路径,可以在web项目的web.xml配置过滤器的时候指定。
如(配置过虑器的部分代码):
   
<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,../STRUTS-XML/struts.xml </param- value>
      </init-param
>
    </filter>
我在这里是把struts.xml放在 WEB-INF\STRUTS-XML\struts.xml 


   上面加载struts.xml是使用的 相对路径(相对于 \WEB-INF\classes目录".."后退退到WEB-INF目录);
----------------------------------------------------------------------------------------------
如果 把struts.xml放在 src\STRUTS-XML\struts.xml 中,这时既可以使用相对路径,又可以使用绝对路径 ,分别如下:
  绝对路径:<param-value>struts-default.xml,struts-plugin.xml,/STRUTS-XML/struts.xml </param- value>             (这时“/”就是相当于classes目录
  相对路径:<param-value>struts-default.xml,struts-plugin.xml,STRUTS-XML/struts.xml </param- value>          (这时是相对于\WEB-INF\classes目录

  ####要注意的是,如果你设置了<param-name>config</param-name>参数,那么struts-default.xml等原来struts2默认加载的文件你也要指定,否则它好像不会自动加载,会出错

可以加载到struts.xml中(<include file="struts-default.xml"></include>)

(另外 struts-default.xml,struts-plugin.xml 是不用特殊指定的 struts.xml放到根目录下就可以 在struts.xml 里include 其他的struts.xml 而struts.xml 主要是进行一些配置的(比如字符类型等))
3.而且使用<include file="../STRUTS-XML/user.xml"/>标签时也要系一个都要指定相对的路径和struts.xml指定一样
还有一种不用这样配置的方法就是使用<include file="/STRUTS-XML/user.xml"/>
也就是struts.xml放在默认的位置,只是其它的配置放到其它的地方
如:

XML code
<struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <include file="STRUTS-XML/user.xml"/></struts>

我就是把user.xml文件放到了\WEB-INF\classes\STRUTS-XML目录下
这样也可以达到统一管理配置文件,也不用配置<param-name>config</param-name>参数
方案二:
    和设置struts.properties的自定义路径相同:
    博客地址:http://blog.sina.com.cn/s/blog_7ffb8dd50101402x.html