【发布时间】:2021-03-21 04:21:34
【问题描述】:
我正在尝试在 tomcat 服务器上部署 struts+spring+hibernate 应用程序,但是 struts 配置出现一些错误,即在 struts.xml 中我使用的是 spring.xml 上定义的 bean editEmployeeAction,但是在部署app,tomcat加载动作失败[未找到动作]
请帮我解决问题!
spring.xml
...
<!-- This bean has been referred fron struts.xml file; So type it correctly; -->
<!-- Make scope prototype; This is really important. -->
<bean id="editEmployeeAction" class="me.modernpage.controller.EditEmployeeAction"
scope="prototype">
<property name="employeeManager">
<ref bean="employeeManager"/>
</property>
</bean>
<bean id="employeeDAO" class="me.modernpage.dao.EmployeeDAOImpl">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="employeeManager" class="me.modernpage.service.EmployeeManagerImpl">
<property name="employeeDAO">
<ref bean="employeeDAO"/>
</property>
</bean>
...
struts.xml 位于 src/
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="messages" />
<constant name="struts.enable.SlachesInActionNames" value="true" />
<package name="default" namespace="" extends="struts-default">
<!-- Two things to Notice:
1) class is set to 'editEmployeeAction' which is bean defined by Spring context
2) We have given the method to be called here as well; -->
<action name="list" class="editEmployeeAction" method="listEmployees">
<result>/view/editEmployeeList.jsp</result>
</action>
<action name="add" class="editEmployeeAction" method="addEmployee">
<result type="redirect">/list</result>
</action>
<action name="delete/*" class="editEmployeeAction" method="deleteEmployee">
<param name="employee.id">{1}</param>
<result type="redirect">/list</result>
</action>
<action name="*" class="editEmployeeAction" method="listEmployees">
<result>/view/editEmployeeList.jsp</result>
</action>
</package>
</struts>
在这里,你可以看到'class'的值是ediEmployeeList bean,那么我认为tomcat找不到这个bean?!
错误:
23:06:57,021 ERROR Dispatcher:42 - Dispatcher initialization failed
无法加载配置。 - 动作 - 文件:/home/yusuf/tomcat/apache-tomcat-9.0.24/web/Spring_Struts_Hibernate/WEB-INF/classes/struts.xml:17:73 在 com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:70) 在 org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:978) 在 org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:446) 在 org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:490) 在 org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74) 在 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57) 在 org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:270) 在 org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:251) 在 org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:102) 在 org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4533) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5172) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) 在 java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) 在 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) 在 org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) 在 java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) 在 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) 在 org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) 在 org.apache.catalina.core.StandardService.startInternal(StandardService.java:421) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) 在 org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:932) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) 在 org.apache.catalina.startup.Catalina.start(Catalina.java:633) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:344) 在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475) 原因:找不到动作类[editEmployeeAction]-动作-文件:/home/yusuf/tomcat/apache-tomcat-9.0.24/web/Spring_Struts_Hibernate/WEB-INF/classes/struts.xml:17:73 在 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:486) 在 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:429) 在 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:556) 在 com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:295) 在 org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112) 在 com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:264) 在 com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67) ... 38 更多
【问题讨论】:
-
请先解决这个问题:
Caused by: Action class [editEmployeeAction] not found -
我试图找出这个说法的所有原因,没有找到线索
-
能否在web.xml等问题中添加更多细节
-
@RomanC web.xml没问题,我通过将struts2-spring-plugin.jar文件放在类路径上解决了这个问题,感谢兄弟的关注