java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet

问题描述:

最近对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

而我们去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">
  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值