首页 > 其他分享 >tomcat 和webapp下jar包冲突

tomcat 和webapp下jar包冲突

时间:2023-04-25 21:03:08浏览次数:39  
标签:ClassNotFoundException name tomcat jar clazz webapp 加载


1,开发过程中遇到过这样一个情况,在本地tomcat下开发调试正常,打包到测试环境的tomcat下所有页面都变成空白页。通过日志发现httpRequest为空,通过对比发现 tomcat的sevlet.jar和webapp的不一致导致。换成相同版本即可
2,tomcat的WebappClassLoader findclass先从自己的webappx下加载类,没有则找父类。和java默认的加载方式不同。

public Class findClass(String name) throws ClassNotFoundException {
        // 先自己加载类,找不到则请求parent来加载,注意这点和java默认的委托模式不同
        Class clazz = null;
        try {
            if ((clazz == null)) {
                    clazz = findClassInternal(name);
            }
            if ((clazz == null) && hasExternalRepositories && !searchExternalFirst) {
                    clazz = super.findClass(name);
            }
            if (clazz == null) {
                throw new ClassNotFoundException(name);
            }
        } catch (ClassNotFoundException e) {
            if (log.isTraceEnabled())
                log.trace("    --> Passing on ClassNotFoundException");
            throw e;
        }
        return (clazz);
}





据此可以认为,在web项目WEB-INF\lib下的jar包优先级高于jboss,tomcat 下的lib.


两处版本不一致的话会导致程序异常。


比较省事的办法是WEB-INF\lib下不再保留重复的jar包,实在闲着没事的话可以自己写个类加载器替换tomcat下WebappClassLoader改变加载顺序。


但是还可能有隐患,WebappClassLoader权限较低,它加载的类只能访问web应用下的资源,如果servlet-api.jar等包用到其他资源时可能出现异常。


这个没实际测过,只是推测。但是catalina要提供对整个容器的支持,servlet-api实现对http协议的封装转换用到外部资源的可能性很大。


标签:ClassNotFoundException,name,tomcat,jar,clazz,webapp,加载
From: https://blog.51cto.com/u_16088628/6225144

相关文章

  • tomcat报错 removeGeneratedClassFiles failed
    1,tomcat切换用户重启后报错如下:Aug29,20142:14:47PMorg.apache.jasper.compiler.CompilerremoveGeneratedClassFilesWARNING:Failedtodeletegeneratedclassfile[/home/joeyon/test/work/Catalina/localhost/_/org/apache/jsp/WEB_INFO/c/common/errorIos_jsp.class]......
  • Eclipse用【 Runnable JAR file】方式打jar包,并用该jar包进行二次开发
     转发:https://www.cnblogs.com/zhangchao0515/p/9520827.html 2.eclipse用Export的RunnableJARfile方式打jar包(带jar包的)右键该项目选择Export,弹出的对话框,选择Java中的RunnableJARFile点击next    Launchconfiguration  选择jar包默认运行的主类(包含main方......
  • 使用Dockerfile部署springboot打包jar包
    1、docker下载JDK1.8镜像dockerpulljava:82、编写Dockerfile文件#依赖的父镜像FROMjava:8#作者MAINTAINERdocker-admin#jar包添加到镜像中ADDxxl-job-admin-2.1.2.jarxxl-job-admin.jar#容器暴露的端口即jar程序在容器中运行的端口EXPOSE8080#容器启动之后......
  • 使用vant4+vw创建webapp项目
    包来源自动引入vue/vue-router/vuex等api (ref,toRefs....)npmiunplugin-auto-import--save-devvant按需导入的插件npmiunplugin-vue-components-D使用vw布局替换px单位插件npmipostcss-px-to-viewport--save-dev完整的vite.config.js文件import{......
  • Linux安装Tomcat
    1.通过远程链接软件连接上我们的linux服务器,下载linux版本的jdk和tomcat压缩包并上传到我们的服务器中,如下:2.分别进行解压缩:tar-zxv-fjdk-8u371-linux-x64.tar.gz回车tar-zxv-fapache-tomcat-8.5.49.tar.gz回车3.启动防火墙systemctlstartfirewalld,查看防火墙......
  • pwn | jarvisoj_level3_x64
    pwn|jarvisoj_level3_x64x64ret2libcexp:frompwnimport*fromLibcSearcherimport*context.log_level='debug'p_vuln=0x00000000004005E6p_main=0x000000000040061Ap_str=0x00000000004006DC#p=process('./level3_x64')p=......
  • Tomcat
            ......
  • Springboot将自定义jar包引入pom
    Springboot将自定义jar包引入pom Springboot将自定义jar包引入pom <dependency><groupId>TrendDB_API</groupId><artifactId>TrendDB_API</artifactId><version>1.0</version>......
  • Eclipse打JAR包引用的第三方JAR包找不到的问题。
    我的程序里引用了别的JAR包在ECLIPSE里运行正常我想把我的程序打个JAR包打包的时候把引用的包也打进去了可运行程序确总是找不到我引用的包是不是路径的问题?急死我了快    解决方案:在你的项目文件夹下建一个META-INF文件夹里面新建一个MANIFEST.MF的文件内容大至如......
  • 解决tomcat控制台乱码的方法
    解决IDEA控制台乱码问题点击Help->EditcustomVMOptions,在最后面添加"-Dfile.encoding=UTF-8"点击右上角EditConfigurations,在tomcat配置中的VMoption中添加"-Dfile.encoding=UTF-8"在tomcat配置中的Startup/Connection页签的Run和Debug添加一个key为JAVA_T......