struts2如何自定义配置文件的位置?

时间:2021-10-31 10:50:35
小弟用的是struts2.1.8 ,想把struts.xml文件放到WEB-INF/config目录下,
按照网上说的试了很多方法都不行,都是报找不到action的异常,放到src目录下就没问题了
这是我的配置:

        <filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
     <param-name>config</param-name>     
                <!--也试过struts-default.xml,struts-plugin.xml,/WEB-INF/config/struts.xml同样不可以-->
    <param-value>struts-default.xml,struts-plugin.xml,../config/struts.xml</param-value>

</init-param>
</filter>

放到WEB-INF/config目录下,访问action的时候的异常:

16:57:15,109 WARN  [ServletUrlRenderer] No configuration found for the specified
 action: 'login' in namespace: ''. Form action defaulting to 'action' attribute'
s literal value.
16:57:16,000 WARN  [ServletUrlRenderer] No configuration found for the specified
 action: 'login' in namespace: ''. Form action defaulting to 'action' attribute'
s literal value.
16:57:16,171 WARN  [Dispatcher] Could not find action or result
There is no Action mapped for namespace / and action name login_rand. - [unknown
 location]
        at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy
.java:178)
        at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.j
ava:61)
        at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(St
rutsActionProxyFactory.java:39)
        at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(D
efaultActionProxyFactory.java:47)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.jav
a:478)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(Exec
uteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
.doFilter(StrutsPrepareAndExecuteFilter.java:91)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:186)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:157)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFi
lter.java:75)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:186)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:157)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:214)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.StandardContextValve.invokeInternal(Standard
ContextValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:152)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:137)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:118)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:102)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)

        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:16
0)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:799)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ssConnection(Http11Protocol.java:705)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
:577)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:683)
        at java.lang.Thread.run(Thread.java:619)

启动的时候的信息:

16:56:46,687 INFO  [XmlConfigurationProvider] Unable to locate configuration fil
es of the name struts-base.xml, skipping
16:56:46,687 INFO  [XmlConfigurationProvider] Parsing configuration file [../config/struts.xml]


到底应该怎么配啊,难道只能放到src目录下吗?配置文件多了看着实在不爽啊,管理也不方便

3 个解决方案

#1


在struts2的配置路径中默认是在/WEB-INF/classes下这样可能有一些不方便,比如我们的所有配置文件在/WEB-INF/conf下面,其实配置比较简单就是如下:

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  <init-param>   
   <param-name>config</param-name>   
   <param-value>../conf/struts.xml</param-value>   
  </init-param> 
 </filter>
 <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
 </filter-mapping>

本来认为成功,结果启动不起来报错,原因是因为更改了config后会把默认的和现有的不能存在继承关系只好包含进来就可以修改struts.xml文件

<struts>

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

</struts>

填上这个就可以了一切OK。
--------------------
以上转自http://blog.sina.com.cn/s/blog_438308750100dsl6.html
--------------------
此类问题建议楼主多搜搜百度谷歌,通常都能找到答案。

#2


解决了……
不是配置的不对。。
是包含的不对……

我的struts.xml文件里还包含了一个自定义的配置文件

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


放到WEB-INF/config之后就不能那样写了。。也要跟着改
改成这个样子

<include file="../config/struts-base.xml"/>

就可以了,晕死。
同样谢谢这位大哥

#3


将conf文件夹设置成源文件目录就可以了。

#1


在struts2的配置路径中默认是在/WEB-INF/classes下这样可能有一些不方便,比如我们的所有配置文件在/WEB-INF/conf下面,其实配置比较简单就是如下:

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  <init-param>   
   <param-name>config</param-name>   
   <param-value>../conf/struts.xml</param-value>   
  </init-param> 
 </filter>
 <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
 </filter-mapping>

本来认为成功,结果启动不起来报错,原因是因为更改了config后会把默认的和现有的不能存在继承关系只好包含进来就可以修改struts.xml文件

<struts>

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

</struts>

填上这个就可以了一切OK。
--------------------
以上转自http://blog.sina.com.cn/s/blog_438308750100dsl6.html
--------------------
此类问题建议楼主多搜搜百度谷歌,通常都能找到答案。

#2


解决了……
不是配置的不对。。
是包含的不对……

我的struts.xml文件里还包含了一个自定义的配置文件

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


放到WEB-INF/config之后就不能那样写了。。也要跟着改
改成这个样子

<include file="../config/struts-base.xml"/>

就可以了,晕死。
同样谢谢这位大哥

#3


将conf文件夹设置成源文件目录就可以了。