Tomcat10与老版本servlet-api不兼容问题
在复习servlet老项目的时候,发现的问题
老项目环境 servlet3.0 Tomcat 8 jdk8 采用idea创建lib,引入jar包并加载到内存,没有使用maven
新环境 为Tomcat10
1、问题及解决方式
问题:启动项目时,可以启动,且没有Tomcat中log日志任何报错,也没有任何提示。但是浏览器报错,并且没有显示任何数据。
解决方式:
换用老版本的tomcat
或者将原有的servlet-api换成tomcat中lib文件夹下的servlet-api.jar或者上找到相应可行的jar包也可以。
老版本servlet的jar包引入是这样的
而新版的也是Tomcat10需要的是这样的,是jarkarta开头的不再是javax
2、问题分析
问题分析,首先要理解servlet和Tomcat的关系
什么是servlet
为了能让Web服务器与Web应用这两个不同的软件系统协作,需要一套标准接口,Servlet就是其中最主要的一个接口。
规定:
Web服务器可以访问任意一个Web应用中实现Servlet接口的类。
Web应用中用于被Web服务器动态调用的程序代码位于Servlet接口的实现类中。
SUN公司(现在被Oracle收购了……)制定了Web应用于Web服务器进行协作的一系列标准Java接口(统称为Java Servlet API)。
SUN公司还对Web服务器发布及运行Web应用的一些细节做了规约。SUN公司把这一系列标准Java接口和规约统称为Servlet规范。
Servlet是一种运行在服务器上的小插件。
Servlet容器是什么
在Servlet规范中,把能够发布和运行JavaWeb应用的Web服务器称为Servlet容器,他的最主要特称是动态执行JavaWeb应用中的Servlet实现类中的程序代码。
Tomcat是什么
Tomcat是Servlet容器,同时也是轻量级的Web服务器。这是它的两个身份!
Apache Server、Microsoft IIS、Apache Tomcat都是Web服务器。
Tomcat作为Web服务器时,主要负责实现HTTP传输等工作。
Tomcat作为Servlet容器时,主要负责解析Request,生成ServletRequest、ServletResponse,将其传给相应的Servlet(调用service( )方法),再将Servlet的相应结果返回。
由上可知Tomcat是承载servlet的一个容器,所以他们之间的许多东西必须要对应。因此老版本的servlet放在Tomcat10中驱动,Tomcat找不到它!!!所以才出现以上的问题。
关于Tomcat10的新特性可参考以下文章
https://blog.51cto.com/u_9177933/3197527
参考文章
https://blog.csdn.net/cws1214/article/details/48391617