最近遇到一个比较头大的问题,就是在项目的src下配置文件太多了,于是想把struts的配置文件放在专门的目录下,但是建立好目录之后,struts.xml就不被加载,百度了下,遇到这样问题的兄弟还不少,于是按照百度的指点,尝试了下:
在web.xml中这样设置 <filter> <filter-name>struts</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,config/struts.xml </param-value> </init-param> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 必须把struts-default.xml,struts-plugin.xml一起添加。为什么要将struts-default.xml,struts-plugin.xml这两个文件一起添加呢?原来struts默认加载classpath路径下的配置文件,也就是说web.xml中的config默认是加载类路径下的配置文件,现在修改了config的值,那么默认的设置就不再起作用了,若单纯的指定config/struts.xml,那么struts就认为只有配置文件config/struts.xml,这样一来它原本依赖的另外两个文件也就不存在了,因此会出现找不到action的局面。
难道只能在config参数中指定struts指定的struts-default.xml,struts-plugin.xml吗?其实,如果只是指定config/struts.xml不加另外两个文件的话启动就会报错,看似只能在config中指定了?如前面所说,config改变了默认的加载选项,只是指定struts.xml确实有失妥当,但是可不可以让struts在加载struts.xml的时候找到另外两个文件呢?
于是尝试把init-param配置项修改为
<init-param> <param-name>config</param-name> <param-value> config/struts.xml </param-value> </init-param>同时在struts.xml中添加
<include file="struts-default.xml" />
<include file="struts-plugin.xml" />
启动tomcat,发现没有问题,同时访问项目,没有问题。加载默认配置文件的问题得到解决。
继续尝试,既然struts默认加载的是类路径下的配置文件,那么是不是可以建立一个和src等同的想过的资源文件架来作为配置文件呢?
于是在项目下建立一个SourceForder,命名为configFolder,将struts.xml放到该文件夹下,同时删除 <init-param> 配置项,启动tomcat,正常,访问项目,没有问题。
于是,关于struts存放路径的问题得到验证和解决,写下这片文章,留下个纪念。