Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean

本文记录了在启动Tomcat服务器时遇到的Struts2框架相关严重错误,并详细展示了错误堆栈跟踪信息。问题根源在于项目依赖中存在版本冲突的struts2-core jar包。通过删除重复的jar包并保留一个正确版本的文件,成功解决了该问题。

今天,tomcat服务器启动时,报严重错误:

2011-4-17 21:41:28 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar:file:/E:/apache-tomcat-6.0.24/apache-tomcat-6.0.24/webapps/shundewater/WEB-INF/lib/struts2-core-2.0.6.jar!/struts-default.xml:8:69
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:208)
 at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
 at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:131)
 at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)
 at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395)
 at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452)
 at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:205)
 at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
 at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
 at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
 at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3838)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
 at org.apache.catalina.core.StandardService.start(StandardService.java:516)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:593)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: Bean type class com.opensymphony.xwork2.ObjectFactory with the name xwork has already been loaded by bean - jar:file:/E:/apache-tomcat-6.0.24/apache-tomcat-6.0.24/webapps/shundewater/WEB-INF/lib/struts2-core-2.0.14.jar!/struts-default.xml:30:72 - bean - jar:file:/E:/apache-tomcat-6.0.24/apache-tomcat-6.0.24/webapps/shundewater/WEB-INF/lib/struts2-core-2.0.6.jar!/struts-default.xml:8:69
 at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:193)
 ... 33 more
2011-4-17 21:41:28 org.apache.catalina.core.StandardContext start
严重: Error filterStart
2011-4-17 21:41:28 org.apache.catalina.core.StandardContext start
严重: Context [/shundewater] startup failed due to previous errors

 

解决办法:去web-inf下的lib下看是否存在相同的jar包,我的就是有相同的jar包,但是版本号不一样。找到了两个相同的jar包后,就删掉一个jar包,重新启动tomcat。

15:30:30.601 [http-nio-8080-exec-5] ERROR org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler - Exception occurred during processing request: ognl.OgnlAction.execute() java.lang.NoSuchMethodException: ognl.OgnlAction.execute() at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1247) ~[ognl-3.0.19.jar:?] at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68) ~[ognl-3.0.19.jar:?] at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108) ~[xwork-core-2.3.32.jar:2.3.32] at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1370) ~[ognl-3.0.19.jar:?] at ognl.ASTMethod.getValueBody(ASTMethod.java:91) ~[ognl-3.0.19.jar:?] at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) ~[ognl-3.0.19.jar:?] at ognl.SimpleNode.getValue(SimpleNode.java:258) ~[ognl-3.0.19.jar:?] at ognl.Ognl.getValue(Ognl.java:467) ~[ognl-3.0.19.jar:?] at ognl.Ognl.getValue(Ognl.java:431) ~[ognl-3.0.19.jar:?] at com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:352) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:404) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:350) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:430) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:290) ~[xwork-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:251) ~[xwork-core-2.3.32.jar:2.3.32] at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41) ~[struts2-core-2.3.32.jar:2.3.32] at com.opensymphony.xwork2.Defaul
03-22
<think>我们正在处理一个关于Struts2框架的错误:`com.opensymphony.xwork2.config.ConfigurationException: No result defined for action ...`。根据用户提供的两个引用和之前的问题,我们需要总结出解决此错误的方案。 根据引用[1]:该错误通常表示没有为action定义名为“error”的结果(或其他结果),但实际原因可能是action中引用的方法未找到或其他错误(例如,引用了一个未更新的工具类方法)。 根据引用[2]:该错误可能是由于struts.xml配置文件错误导致的,并给出了一个配置示例。 因此,我们可以归纳出以下解决步骤: 1. **检查struts.xml配置文件**:确保在struts.xml中为对应的action定义了正确的结果(result)。特别是检查结果名称是否与action方法返回的字符串匹配,以及结果页面是否存在。 示例配置(来自引用[2]): ```xml <package name="default" extends="struts-default" namespace="/"> <action name="user_*" class="com.zwl.crm.web.action.UserAction" method="user_regist"> <result name="success">/login.jsp</result> </action> </package> ``` 注意:在这个例子中,action方法`user_regist`返回"success"时,会跳转到login.jsp。如果方法返回了其他值(比如"error"),但没有在配置中定义,就会报错。 2. **检查action方法**:确保action中调用的方法存在,并且没有其他运行时错误(如空指针、类未找到等)。特别是,如果action中引用了其他类的方法,确保这些类已经正确部署,并且方法签名正确。 3. **检查方法返回的字符串**:确保action方法返回的字符串(如"success"、"error"等)在struts.xml中都有对应的result定义。 4. **检查结果页面路径**:确保result中指定的页面路径正确,且存在于Web应用的相应位置。 5. **更新引用的类或方法**:如果修改了action所引用的其他类(如工具类),确保这些更改已经部署到服务器上(重新编译、重新部署等)。 6. **查看完整错误堆栈**:查看服务器日志中的完整错误信息,通常会有更详细的错误原因(例如,是否是因为某个方法未找到,或者某个类未定义等)。 7. **检查命名空间**:如果action配置在某个命名空间下,访问时URL需要包含正确的命名空间。 由于用户提到“本地OK,传服务器上报错”,还要注意环境差异: - 服务器上的配置是否与本地一致? - 服务器上的代码是否是最新且完整部署? - 服务器上的依赖库是否完整? 总结解决方案步骤: 1. 检查struts.xml中对应action的result配置是否完整(特别是方法返回的所有可能结果)。 2. 检查action方法中调用的其他方法或类是否存在,且没有错误。 3. 检查服务器上部署的代码是否为最新,特别是被修改的类是否已经更新。 4. 查看服务器日志,定位具体错误原因。 根据以上分析,回答用户问题。 </think>### 解决 `com.opensymphony.xwork2.config.ConfigurationException: No result defined for action` 错误的方法 此错误表示 Struts2 框架无法为 Action 的返回结果找到对应的视图配置。以下是系统性的解决方案,结合引用内容和常见排查经验: --- #### **1. 检查 `struts.xml` 配置(核心原因)** - **结果映射缺失** 确认 Action 方法返回的所有字符串(如 `"error"`, `"success"`)都在 `<result>` 标签中明确定义: ```xml <action name="yourAction" class="com.example.YourAction"> <!-- 必须包含所有可能的返回值 --> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> <!-- 确保 error 路径存在 --> </action> ``` *引用[1]和[2]均强调未定义 `error` 结果是常见诱因*[^1][^2]。 - **通配符配置错误** 若使用通配符(如 `method="{1}"`),需检查方法名与返回值的匹配: ```xml <action name="user_*" method="{1}" class="com.example.UserAction"> <result name="success">/result_{1}.jsp</result> </action> ``` --- #### **2. 验证 Action 方法实现** - **方法签名一致性** 检查 `struts.xml` 中 `method` 属性值与 Action 类中的方法名**严格匹配**(大小写敏感)。 - **返回值合法性** 确保方法返回的字符串(如 `return "error";`)在配置中有对应 `<result>`。 *引用[1]提到:即使报错指向配置,实际可能是方法内部引用缺失或工具类未更新*[^1]。 --- #### **3. 检查视图文件路径** - 确认 JSP/HTML 文件路径与 `<result>` 中配置**完全相同**(如 `/error.jsp` 需位于 WebRoot 根目录)。 - 路径避免拼写错误或多余空格(如 ` /error.jsp `)。 --- #### **4. 依赖项和环境排查** - **服务器环境一致性** 本地正常但服务器报错时(引用[1]场景): - 检查依赖库(如 `xwork-core.jar`)版本是否一致。 - 清理服务器缓存并重新部署。 - **类更新同步** 确保 Action 引用的工具类或方法已同步到服务器(如引用[1]中提到的工具类缺失)[^1]。 --- #### **5. 日志分析** - 查看服务器日志(如 Tomcat `catalina.out`)获取完整堆栈信息: - 若提示 `MethodNotFoundException`,检查方法名拼写或权限修饰符(需 `public`)。 - 若提示 `ClassNotFoundException`,检查包路径或编译文件是否缺失。 --- #### **总结流程图** ```mermaid graph TD A[报错:No result defined for action] --> B{检查struts.xml} B --> |缺失result| C[添加<result name=''error''>] B --> |路径错误| D[修正JSP路径] A --> E{检查Action方法} E --> |方法名不匹配| F[修正method属性] E --> |返回值未定义| G[扩展result配置] A --> H{服务器环境} H --> |依赖冲突| I[统一库版本] H --> |未更新代码| J[重新部署工具类] ``` 通过以上步骤,90% 的此类错误可被解决。重点优先检查 `struts.xml` 的 `<result>` 定义和 Action 方法返回值一致性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值