文章目录

  • 问题描述:
  • 问题分析:
    • jdk与Tomcat
  • 解决问题:
    • 方案一:
    • 方案二:
    • 补充

问题描述:

最近对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/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">

java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet相关推荐

  1. 解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener

    解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener   笔者在做代 ...

  2. SpringBoot运行出现异常解决: nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext

    今天在使用SpringBoot创建了一个项目出现如下异常 org.springframework.beans.factory.BeanCreationException: Error creating ...

  3. 关于IDEA启动Spring Boot项目出现Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext at j

    Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext at java.lang.Class.getDeclar ...

  4. SSM错误:Exception in thread “main“ java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletReque

    参考:https://www.cnblogs.com/756623607-zhang/p/10674388.html

  5. java.lang.ClassNotFoundException: javax.servlet.Filter

    java.lang.ClassNotFoundException: javax.servlet.Filter:有两个原因:(1)在maven中的作用域,不能是provided,需要是compile就是 ...

  6. javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法...

    错误如下,不知道是不是遇到鬼了,之前好好的,装了myeclipse以后出错了(说实话,myeclipse用的很不爽,感觉netbeans更好用些) HTTP Status 500 - type Exc ...

  7. SpringBoot 项目tomcat插件启动报错 java.lang.NoClassDefFoundError: javax/el/ELManager

    问题描述: SpringBoot项目 tomcat插件启动出现下面的问题: ERROR 2021-04-07 08:42:03,129 org.springframework.boot.SpringA ...

  8. java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/

    今天启动tomcat的时候出现了这样的错误 java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationC ...

  9. java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag 错误

    java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag 电脑重置后,写一个springmvc的作业的时候,使用tom ...

最新文章

  1. 博客园第一天,开放封闭原则
  2. 从源码到实战:BERT模型训练营
  3. C 中的内存操作函数-memcpy 等(to be continued)
  4. pcb 布线电容 影响延时_信号在PCB走线中传输时延
  5. mysql群集配置_CentOS7 - 建立一个MySQL集群
  6. no suitable driver found for jdbc:mysql//localhost:3306/..
  7. .NET Framework3.0答疑
  8. 95-290-362-源码-内存管理-Buffer-LocalBufferPool
  9. Ubuntu16.04装机5:安装Anaconda3
  10. 基于光流模型的图像运动分析
  11. 高数 | 【一元函数积分学】常用广义积分及定积分汇总
  12. excel实现分组计数
  13. 华为十年,总结出的12条经验!(作者是一级部门总监,华为副总裁)
  14. DELL服务器自动开机设置
  15. Hadoop 新手填坑指南
  16. QQ空间点赞...取消点赞
  17. 我也是一只IT小小鸟
  18. delphi透明panel组件或者制作方法
  19. 讲故事投资 天使投资人的中国式生存
  20. linux嵌入式vi使用,嵌入式Linux编辑器vi最基本的使用.doc

热门文章

  1. 唐巧访谈: iOS大V的技术进阶之路
  2. iOS中block的详解weakSelf、strongSelf-转自唐巧
  3. Jvm与DVM与ART
  4. PHP下制作图灵机器人程序
  5. yii mysql gii_YII-快速用gii创建一个简单的yii项目!
  6. Richer Convolutional Features for Edge Detection(RCF-PYTorch)部署
  7. 微机原理与接口技术实验:子程序设计实验
  8. 使用excel进行数据挖掘(4)---- 突出显示异常值
  9. WHERE语句中BETWEEN与IN的使用教程-MySQL
  10. js和ts两种 将 小写金额转中文大写汉字,阿拉伯数字金额格式化成中文大写汉字,数字金额转换成财务发票大写中文