首页 > 编程语言 >java.lang.NoClassDefFoundError

java.lang.NoClassDefFoundError

时间:2022-10-30 13:58:22浏览次数:74  
标签:lang web 依赖 java jdk Tomcat NoClassDefFoundError 版本 Servlet

问题描述:

最近对JavaWeb进行了简单复习,在对照以往笔记写好了一个Servlet服务时发现无法启动该项目服务。针对java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet这个问题,百度结果有让导jar包的、有让提升IDEA版本的、有让重装Tomcat的,也有让修改项目中web.xml的,有些方法一看就不靠谱,于是我便尝试修改项目中web.xml版本,发现依旧不行,但从中却获得了灵感。

问题分析:

Tomcat原码是基于java,于是乎便联想到了ServletTomcatjdk之间是否存在着版本关联。果然在对Tomcat配置文件以及新建web项目时引入Servlet依赖版本分析时发现了问题。

jdk与Tomcat

目前项目开发常用的jdk版本依旧为1.8,而我最先选用的Tomcat版本为10.0.12,那么问题来了,2014年发布的jdk1.82020年发布的Tomcat10.0.0他们它们可以兼容吗?我们新建项目一步步的看:请添加图片描述
不难发现jdk1.8的Servlet支持版本为4.0.1
img
而我们去Tomcat下载目录里看10版本以上的Tomcat所使用的的Servlet版本请添加图片描述
请添加图片描述
得出结论,jdk1.8所依赖的Servlet版本为4.0,而Tomcat10.0.12依赖的Servlet版本为5.0,二者不匹配!
此时我们尝试将jdk版本由8上调至9:
请添加图片描述
发现jdk对Servlet依赖版本变成了5.0.0。但是改动jdk版本并不是我们的本意,此时就需要考虑降低Tomcat配置,使其匹配当前jdk
观察Tomcat9.0.54版本的配置文件:
请添加图片描述
请添加图片描述
发现Tomcat9.0.54版本所依赖的Servlet版本为4.0

解决问题:

方案一:

降低Tomcat版本使其依赖的Servlet版本与jdk所依赖的Servlet版本相匹配。
请添加图片描述

方案二:

提升jdk版本,目的同样是使Tomcat依赖的Servlet版本与jdk所依赖的Servlet版本相匹配请添加图片描述

补充

在解决此问题时尽可能不要改动jdk版本。另外为了避免不必要麻烦,项目中的web.xml头文件尽可能和Tomcat保持一致

<!--此处为Tomcat9.0.54版本-->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
123456

参考地址:https://blog.csdn.net/D_ps19990501/article/details/121604828

标签:lang,web,依赖,java,jdk,Tomcat,NoClassDefFoundError,版本,Servlet
From: https://www.cnblogs.com/javaxubo/p/16841123.html

相关文章

  • JavaScript – Web Worker
    前言在上一篇<<单线程与执行机制>> 中,我们提到了WebWorker.它的诞生是为了解决JS主线程执行耗时计算时,导致UI无法及时更新的卡死现象.它的解决思路是把......
  • javaScript简介和javaScript发展史
    *概念:一门客户端脚本语言*运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎*脚本语言:不需要编译,直接就可以被浏览器解析执行了*功能:*......
  • Java 使用StringBuilder组装字符串
    下面这个例子来自SpringBoot源码,这里是要打印程序启动的时间这样的字符串,需要拼装的信息有程序名字,启动时长,JVM时长。privateStringBuildergetStartedMessage(StopWatc......
  • Java 读取 Excel 模板,将数据填入Excel表格,后转换为PDF文件(实用)
    前言我在互联网上冲浪的时候,看到有的小伙伴说可以使用​​Excel​​模板,来实现这个功能。这个方式我是喜欢的~(ps:因为不要用代码去画表格,是真的舒服~)大致流程如下:编写一个E......
  • Java语言的过滤数据流
    过滤数据流为了解决不同数据流之间速度、数据格式差异的问题,以便提高输入/输出操作的效率(特别是当需要大量的输入、输出操作的程序时),因此,Java贴心的提供了过滤流。在已存在......
  • javascript:监控video全屏时取消静音(chrome 107.0.5304.87)
    一,js代码:<html><head><metacharset="utf-8"/><title>测试</title></head><body><divstyle="width:50%;height:100%;float:left;margin-left:-0.3px;pos......
  • java math和random注意项总结以及包装类
    Math功能:复杂的数学运算Random功能:用于产生随机数注意:固定种子生成随机数的序列是一样的(序列中的数字是不一样的)packagetest;publicclasstest8{publicstatic......
  • hive 报:java.net.NoRouteToHostException: 没有到主机的路由
    这种没有到主机的路由问题屡见不鲜了,一般要么是namenode与datanode主机名间本身互ping就ping不通,这个概率较小,因为都知道要保证master与slaves节点是能正常通信,所以都会......
  • java new Date() 获取的时间存到库里少了八个小时?
    javanewDate()获取的时间存到库里少了八个小时?javanewDate()获取的时间存到mysql库里少了八个小时? 在application.yml修改数据库配置为url:jdbc:mysql://localhost......
  • Java知识【XML知识】
    1.xml1.1概述【理解】万维网联盟(W3C)万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。建立者:TimBerners-Lee(蒂姆·伯纳斯......