java.lang.NoClassDefoundError,weblogic迁移至tomcat加载不到类

在将项目从Weblogic迁移到Tomcat时遇到java.lang.NoClassDefFoundError错误,问题源于类加载器的工作方式不同。Weblogic采用委托模型,而Tomcat的类加载顺序导致某些类在WEB-INF/lib中未被正确加载。解决办法是将特定库放入Tomcat的lib目录。

最近项目从weblogic迁移至tomcat测试环境测试是,接口报错:java.lang.NoClassDefoundError
报错的类是axis.jar(org.apache.axis)放在项目的WEB-INF/lib里,同样在weblogic没有问题,后来研究tomcat和weblogic类加载器,希望找到答案。
weblogic:
类加载器在加载类时使用委托模型。类加载器实现首先检查其缓存,以查看是否已加载所请求的类。此类验证可提高性能,因为它使用了缓存的内存副本,而不是从磁盘重复加载类。如果在其缓存中找不到该类,则当前的类加载器会向其父级询问该类。仅当父级无法加载类时,类加载器才会尝试加载该类。如果父类和子类加载器中都存在类,则加载父版本。遵循此委派模型以避免加载相同表单的多个副本。同一类的多个副本可以导致a ClassCastException。

  1. JDK Classloader
  2. JDK ext Class Loader
  3. Weblogic System Class Loader
  4. Domain Class Loader(Child of System Class Loader)
  5. App Class Loader (负责装载应用中的所有的EJB JAR文件)
  6. Web Class Loader (负责装载所有的Web application 中的WAR文件(所有得jsp文件除外)
  7. JSP Class Loader (负责装载Web application 中的所有的jsp文件)

tomcat:
1 Bootstrap 引导类加载器
  加载JVM启动所需的类,以及标准扩展类(位于jre/lib/ext下)
2 System 系统类加载器
  加载tomcat启动的类,比如bootstrap.jar,通常在catalina.bat或者catalina.sh中指定。位于CATALINA_HOME/bin下。
3 Common 通用类加载器
  加载tomcat使用以及应用通用的一些类,位于CATALINA_HOM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值