`

一个Struts版本冲突导致的问题

阅读更多

前天,有个小应用,用Struts1.2.8作为系统框架,突然出现问题,启动时控制台上报错:

<2009-10-29 下午11时36分40秒 CST> <Error> <HTTP> <BEA-101216> <Servlet: "action" failed to preload on startup in Web application
"xmdswzgb".
javax.servlet.UnavailableException: org.apache.struts.util.MessageResourcesFactory.setConfig(Lorg/apache/struts/config/MessageRe
urcesConfig;)V
        at org.apache.struts.action.ActionServlet.init(ActionServlet.java:368)
        at javax.servlet.GenericServlet.init(GenericServlet.java:258)
        at weblogic.servlet.internal.ServletStubImpl$ServletInitAction.run(ServletStubImpl.java:993)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
        at weblogic.servlet.internal.ServletStubImpl.createServlet(ServletStubImpl.java:869)
        at weblogic.servlet.internal.ServletStubImpl.createInstances(ServletStubImpl.java:848)
        at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:787)
        at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:3252)
        at weblogic.servlet.internal.WebAppServletContext.preloadServlets(WebAppServletContext.java:3197)
        at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:3174)
        at weblogic.servlet.internal.HttpServer.preloadResources(HttpServer.java:688)
        at weblogic.servlet.internal.WebService.preloadResources(WebService.java:483)
        at weblogic.servlet.internal.ServletInitService.resume(ServletInitService.java:30)
        at weblogic.t3.srvr.SubsystemManager.resume(SubsystemManager.java:131)
        at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:964)
        at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:359)
        at weblogic.Server.main(Server.java:32)

 

 

粗一看,以就 中Struts启动初始化时装载配置文件出错,于是就按这个思路去找原因,翻来覆去就是找不出原因来,也拿Struts的源代码来单步跟踪,最后都是在:org.apache.struts.action.ActionServlet类中的方法initModuleMessageResources内出错,具体就是在执行:

factoryObject.setConfig(mrcs[i]);

这句时就出错了,查看factoryObject对象,没发现里面有定义setConfig方法。但我没意识到是这里出问题,于是继续找。找了两三天,还没有结果。

 

今天,想看看日志里会不会有什么线索。打开后发现日志里对这个错报出的信息与上面控制台显示的有所不同,如下:

2009-10-29 23:03:11 ERROR (ActionServlet.java:364) - Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable.  Most likely, this is due to an incorrect or missing library dependency.
java.lang.NoSuchMethodError: org.apache.struts.util.MessageResourcesFactory.setConfig(Lorg/apache/struts/config/MessageResourcesConfig;)V
 at org.apache.struts.action.ActionServlet.initModuleMessageResources(ActionServlet.java:918)
 at org.apache.struts.action.ActionServlet.init(ActionServlet.java:334)
 at javax.servlet.GenericServlet.init(GenericServlet.java:258)
 at weblogic.servlet.internal.ServletStubImpl$ServletInitAction.run(ServletStubImpl.java:993)
 at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
 at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
 at weblogic.servlet.internal.ServletStubImpl.createServlet(ServletStubImpl.java:869)
 at weblogic.servlet.internal.ServletStubImpl.createInstances(ServletStubImpl.java:848)
 at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:787)
 at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:3252)
 at weblogic.servlet.internal.WebAppServletContext.preloadServlets(WebAppServletContext.java:3197)
 at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:3174)
 at weblogic.servlet.internal.HttpServer.preloadResources(HttpServer.java:688)
 at weblogic.servlet.internal.WebService.preloadResources(WebService.java:483)
 at weblogic.servlet.internal.ServletInitService.resume(ServletInitService.java:30)
 at weblogic.t3.srvr.SubsystemManager.resume(SubsystemManager.java:131)
 at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:964)
 at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:359)
 at weblogic.Server.main(Server.java:32)

 

看到红字那一句,原来是方法找不到,联想到刚才跟踪时factoryObject对象中没有setConfig方法,看来原因就是这个了。但我用的1.2.8版本的Struts,而从1.2.8的源代码可以看到是有这个方法的。怎么回事呢?我怀疑是不是应用中包含了两个不同版本的Struts。我于是就搜索应用的目录,没找到重复的Struts.jar。

 

于是手工在目录中进行搜寻,突然看到编译目标目录下有一个Struts1.2.7的目录,里面是完整的Struts1.2.7的包结构,于是就把目录从ClassPath中移除,再重启,OK。原来真是版本冲突带来的问题,这个1.2.7版的Struts是前两天为了调试一个问题而下载的,并把这些源文件也放到工程目录,开发工具自动编译了那些源文,才导致了前面出现的问题。于是把Struts1.2.7的类删除,再重启,就不再报错了。

分享到:
评论

相关推荐

    Struts2.1 Core与Hibernate3.3冲突解决【去jar】

    总的来说,处理Struts2.1和Hibernate3.3的冲突是一个细致的过程,需要理解两个框架的内部机制和依赖关系,同时也需要对Java类加载机制有一定的了解。通过合理地管理库文件和配置,我们可以在保持框架功能完整性的...

    struts2,fckeditor冲突解决

    Struts2 是一个基于MVC(Model-View-Controller)架构模式的Java Web框架,它提供了强大的控制器层功能,帮助开发者构建动态、数据驱动的Web应用。而FCKeditor则是一个富文本编辑器,允许用户在网页上创建和编辑内容...

    Struts2.3.15.1版本升级到2.3.32详细流程

    Struts2作为Struts框架的第二代产品,提供了一个灵活的架构来支持MVC设计模式,帮助开发者更高效地构建复杂的Web应用。然而,任何软件系统都无法完全避免安全隐患,Struts2也不例外。 在2017年,Struts2被曝出多个...

    struts2没有冲突的源代码

    标题提到的"struts2没有冲突的源代码"可能是指在项目集成或依赖管理中,所有相关的Struts2库和其他第三方库之间不存在版本冲突的问题。 描述中的"jar包没有冲突"意味着所有的Java Archive (JAR) 文件,即包含Java类...

    struts2 各版本所需最少jar包整理

    - 避免版本冲突:确保所有依赖库的版本一致,以防止因不同版本间的不兼容问题导致错误。 - 更新安全补丁:Struts2历史上曾出现过严重的安全漏洞,比如著名的CVE-2017-5638,因此应及时更新到最新修复版本。 描述中...

    struts2+spring集成bug——使用AOP时可能遇到的问题分析

    但有些Struts2的插件或者拦截器可能期望动作类是一个接口,这可能导致问题。确保你知道哪种代理模式正在被使用,并且它与你的代码兼容。 4. **依赖注入问题**:Spring的依赖注入可能会在Struts2的生命周期中出现...

    Birt 与 Struts2 整合

    而Struts2是一个流行的MVC框架,用于构建动态、高性能的Web应用程序。两者整合可以实现动态数据的报表生成和展示,但在实际应用中,往往会遇到过滤器冲突的问题。 ### BIRT与Struts2整合的关键知识点 #### 1. 过滤...

    低版本struts2升级高版本避免漏洞方案

    Struts2是一个基于Java的开源Web应用框架,它继承了Struts1的优点,并在此基础上增加了许多新特性,如拦截器(Interceptor)、结果类型(Result Type)等。Struts2框架通过简化开发过程并提供一系列强大的功能,帮助...

    解决Struts2与SWFupload上传冲突问题

    Struts2是一个基于MVC设计模式的Java Web框架,而SWFupload则是一个JavaScript库,用于实现Flash的文件上传功能。两者结合使用时,可能会遇到一些冲突问题,主要是由于它们处理文件上传的方式不同所导致的。下面将...

    struts1和struts2相关jar包(已分开

    Struts是Apache软件基金会下的一个开源项目,主要提供MVC(Model-View-Controller)设计模式的实现,用于构建企业级的Java Web应用程序。这里提到的"struts1和struts2相关jar包"分别指的是Struts框架的两个主要版本...

    struts2漏洞升级jar包

    值得注意的是,"要不然会导致jar包冲突"提示我们,仅添加新版本的jar而不删除旧版本可能会导致运行时问题,因为多个版本的同一库在同一环境中并存可能会引起不兼容或混乱。 标签"struts2漏洞"、"struts2升级"和...

    采用共享jar包部署struts2+spring集成项目会遇到的问题

    2. **类装载混乱**:由于Java的类加载机制,可能会导致一个应用中的类覆盖另一个应用的类,引发运行时异常。 3. **资源冲突**:例如,Struts2的配置文件(struts.xml)或Spring的配置文件(applicationContext.xml)...

    Struts2 框架搭建(基本)和几个报错问题

    检查pom.xml或lib目录,确保只使用一个版本的Struts2库。 5. **Null Pointer Exception**:这可能是由于Action中的属性没有初始化或对象为null时调用了其方法。确保所有对象在使用前都已正确初始化。 6. **Action...

    struts2详细介绍

    **Struts2**是Apache Struts的一个后续版本,它是一个开源的Web应用程序框架,主要用于Java EE平台上的MVC架构设计模式。相比于其前身Struts1,Struts2提供了更强大的功能集,包括更加灵活的配置方式、丰富的拦截器...

    struts-json-plugin-2.1.8.jar struts2-junit-plugin-2.1.8.jar json-lib-2.1.jar

    在给定的标题和描述中,提到的是关于Struts2的JSON插件和相关库的版本问题,以及如何解决这个问题。 首先,我们来看`struts-json-plugin-2.1.8.jar`,这是Struts2的JSON插件,它允许Struts2的动作类直接返回JSON...

    struts2和spring和Hibernate整合的jar包

    在整合Struts2、Spring和Hibernate时,我们通常会遇到一些包冲突的问题,尤其是在使用IDE如MyEclipse时。这可能是由于不同库版本之间的不兼容性,或者是重复引入了相同的类导致的。解决这些问题通常需要仔细检查项目...

    《struts开发遇到的问题.rar》

    - 如果在 `core` 文件夹中有 Struts 的核心库,可能是为了处理类路径下的 JAR 包冲突或版本兼容性问题。确保所有依赖库版本兼容,避免使用不同版本的 Struts 组件混搭。 3. **自定义组件或插件**: - 文件 `day...

    kindeditor编辑器与struts2上传图片错误冲突解决

    本实例聚焦于“kindeditor编辑器与struts2上传图片错误冲突的解决”,这是一个常见的问题,特别是在开发涉及用户内容编辑和上传功能的Web应用时。Kindeditor是一款强大的开源富文本编辑器,它提供了丰富的编辑功能,...

    Struts2最少jar包

    - **版本兼容性**:在选择这些jar包时需要注意其版本号与其他依赖库之间的兼容性问题,避免出现版本冲突导致的问题。 - **安全性**:确保所使用的jar包是最新的稳定版本,定期检查并更新至最新版本以修复已知的安全...

    struts2文件上传中的struts.multipart.saveDir提示信息

    在Struts2框架中,文件上传是一个常见的功能,允许用户通过表单提交文件到服务器进行存储或处理。在实现文件上传时,Struts2需要一个临时目录来保存上传的文件内容,直到它们被完全接收并处理。这个临时目录是通过...

Global site tag (gtag.js) - Google Analytics