问题描述
我有一个包含多个模块的 Maven 项目.在四个模块中,其中两个是 Web 模块.
I have a Maven project with multiple modules. Out of four modules, two of them are web modules.
这是结构.
MyProject | |__ api | |__ commons | |__ web_child | |__ web_main
web_main 模块是主要模块,它也可以包含 web_child 模块.
web_main module is the main one and it can include web_child module also.
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 和公共)模块.
web-main depends on all the modules, and web-child depends on first two (API & commons) modules.
在 web-main 的 pom.xml 中,我正在添加 web-child 的依赖项,它会自动添加其他两个罐子.
in web-main's pom.xml, I'm adding the dependency for web-child and it will automatically add other two jars.
主模块 web-main 在服务器上完美运行.
The main module web-main is running perfectly on server.
但是当我尝试单独运行 web-child 模块时,它会显示类似
But when I am trying to run the web-child module alone, it is showing error like
There is no Action mapped for namespace [/] and action name [childMenu] associated with context path ...
因为它没有取struts-config.xml
当我将文件重命名为 struts.xml 时,web-child 工作正常.但是那个时候主模块没有运行.
When I am renaming the file to struts.xml, web-child is working fine. But that time main module is not running.
所以我想将子模块中的 struts.xml 重命名为 struts-config.xml 并且我需要明确指定它.
So I want to rename the struts.xml in child module to struts-config.xml and I need to specify it explicitly.
我正在使用 Struts2.但是我在 web.xml 中尝试了以下内容,显然它不起作用
I am using Struts2. But I have tried the following in web.xml and obviously it didn't work
<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 中添加了以下内容
Hi, I added following in my 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>
我得到以下异常.我需要添加任何依赖项吗?
And I am getting following exception. Do I need to add any dependency?
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过滤器初始化参数中明确指定配置文件.
Specify explicitly config file in the struts filter initialization parameter.
<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>