java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
文章目录
- 问题描述:
- 问题分析:
- jdk与Tomcat
- 解决问题:
- 方案一:
- 方案二:
- 补充
问题描述:
最近对JavaWeb进行了简单复习,在对照以往笔记写好了一个Servlet服务时发现无法启动该项目服务。针对java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
这个问题,百度结果有让导jar包
的、有让提升IDEA版本
的、有让重装Tomcat
的,也有让修改项目中web.xml
的,有些方法一看就不靠谱,于是我便尝试修改项目中web.xml版本,发现依旧不行,但从中却获得了灵感。
问题分析:
Tomcat原码是基于java,于是乎便联想到了Servlet
、Tomcat
、jdk
之间是否存在着版本关联
。果然在对Tomcat配置文件以及新建web项目时引入Servlet依赖版本分析时发现了问题。
jdk与Tomcat
目前项目开发常用的jdk版本依旧为1.8,而我最先选用的Tomcat版本为10.0.12,那么问题来了,2014
年发布的jdk1.8
和2020
年发布的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相关推荐
- 解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener 笔者在做代 ...
- SpringBoot运行出现异常解决: nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext
今天在使用SpringBoot创建了一个项目出现如下异常 org.springframework.beans.factory.BeanCreationException: Error creating ...
- 关于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 ...
- SSM错误:Exception in thread “main“ java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletReque
参考:https://www.cnblogs.com/756623607-zhang/p/10674388.html
- java.lang.ClassNotFoundException: javax.servlet.Filter
java.lang.ClassNotFoundException: javax.servlet.Filter:有两个原因:(1)在maven中的作用域,不能是provided,需要是compile就是 ...
- javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法...
错误如下,不知道是不是遇到鬼了,之前好好的,装了myeclipse以后出错了(说实话,myeclipse用的很不爽,感觉netbeans更好用些) HTTP Status 500 - type Exc ...
- SpringBoot 项目tomcat插件启动报错 java.lang.NoClassDefFoundError: javax/el/ELManager
问题描述: SpringBoot项目 tomcat插件启动出现下面的问题: ERROR 2021-04-07 08:42:03,129 org.springframework.boot.SpringA ...
- java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/
今天启动tomcat的时候出现了这样的错误 java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationC ...
- java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag 错误
java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag 电脑重置后,写一个springmvc的作业的时候,使用tom ...
最新文章
- 博客园第一天,开放封闭原则
- 从源码到实战:BERT模型训练营
- C 中的内存操作函数-memcpy 等(to be continued)
- pcb 布线电容 影响延时_信号在PCB走线中传输时延
- mysql群集配置_CentOS7 - 建立一个MySQL集群
- no suitable driver found for jdbc:mysql//localhost:3306/..
- .NET Framework3.0答疑
- 95-290-362-源码-内存管理-Buffer-LocalBufferPool
- Ubuntu16.04装机5:安装Anaconda3
- 基于光流模型的图像运动分析
- 高数 | 【一元函数积分学】常用广义积分及定积分汇总
- excel实现分组计数
- 华为十年,总结出的12条经验!(作者是一级部门总监,华为副总裁)
- DELL服务器自动开机设置
- Hadoop 新手填坑指南
- QQ空间点赞...取消点赞
- 我也是一只IT小小鸟
- delphi透明panel组件或者制作方法
- 讲故事投资 天使投资人的中国式生存
- linux嵌入式vi使用,嵌入式Linux编辑器vi最基本的使用.doc
热门文章
- 唐巧访谈: iOS大V的技术进阶之路
- iOS中block的详解weakSelf、strongSelf-转自唐巧
- Jvm与DVM与ART
- PHP下制作图灵机器人程序
- yii mysql gii_YII-快速用gii创建一个简单的yii项目!
- Richer Convolutional Features for Edge Detection(RCF-PYTorch)部署
- 微机原理与接口技术实验:子程序设计实验
- 使用excel进行数据挖掘(4)---- 突出显示异常值
- WHERE语句中BETWEEN与IN的使用教程-MySQL
- js和ts两种 将 小写金额转中文大写汉字,阿拉伯数字金额格式化成中文大写汉字,数字金额转换成财务发票大写中文