我有一个包含多个模块的 Maven 项目。四个模块中,其中两个是 Web 模块。

这是结构。

MyProject 
   | 
   |__ api 
   | 
   |__ commons 
   | 
   |__ web_child 
   | 
   |__ web_main 

web_main 模块是主要模块,它还可以包含 web_child 模块。

web_child模块结构为

 web_child 
     | 
     |__ src/main/java //java action classes and all 
     |__ src/main/resources 
     |    |__ struts-config.xml 
     | 
     |__ WEB-INF 
          |__ JSP Pages 

web_main模块结构为

 web_main 
     | 
     |__ src/main/java //java action classes and all 
     |__ src/main/resources 
     |    |__ struts.xml 
     | 
     |__ WEB-INF 
          |__ JSP Pages 

两个模块都是 war

web-main 依赖于所有模块,web-child 依赖于前两个(API 和 commons)模块。

web-mainpom.xml 中,我添加了 web-child 的依赖项,它会自动添加其他两个 jar。

主模块web-main在服务器上完美运行。

但是当我尝试单独运行 web-child 模块时,它显示类似

的错误
There is no Action mapped for namespace [/] and action name [childMenu] associated with context path ...   

因为它没有采用struts-config.xml

当我将文件重命名为 struts.xml 时,web-child 工作正常。但当时主模块没有运行。

所以我想将子模块中的 struts.xml 重命名为 struts-config.xml 并且我需要明确指定它。

我正在使用Struts2。但我在 web.xml 中尝试了以下操作,显然它不起作用

<servlet> 
    <servlet-name>action</servlet-name> 
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
    <init-param> 
        <param-name>config</param-name> 
        <param-value>../resources/struts-config.xml</param-value> 
    </init-param> 
  </servlet> 

如何解决这个问题?

更新1

嗨,我在我的 web-child 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-config.xml</param-value> 
    </init-param> 
</filter> 

我遇到了以下异常。我需要添加任何依赖项吗?

SEVERE: Exception starting filter struts2 
Unable to load configuration. - [unknown location] 
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:483) 
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74) 
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51) 
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281) 
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262) 
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107) 
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976) 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1653) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:724) 
Caused by: Unable to load configuration. - [unknown location] 
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:71) 
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:429) 
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:471) 
    ... 19 more 
Caused by: Cannot locate the chosen ObjectFactory implementation: spring - [unknown location] 
    at org.apache.struts2.config.BeanSelectionProvider.alias(BeanSelectionProvider.java:391) 
    at org.apache.struts2.config.BeanSelectionProvider.alias(BeanSelectionProvider.java:362) 
    at org.apache.struts2.config.BeanSelectionProvider.register(BeanSelectionProvider.java:288) 
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:215) 
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:68) 
    ... 21 more 

请您参考如下方法:

在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.xml,struts-config.xml,struts-default.xml,struts-plugin.xml</param-value> 
    </init-param> 
</filter> 


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!