Tomcat 10中Servlet无法正常使用的解决办法
问题描述
在一个java EE项目中,部署了Tomcat 10版本的服务器,在运行过程中发现webapp里面的项目都可以正常跑起来,但是写的servlet文件全都没反应,经过反复检查,确认代码是没有问题的。
原因分析
查了资料才知道原来在Tomcat 10中把包名从以往版本的javax改成了jakarta,而maven导包的时候依旧使用原来的javax,导致Tomcat 10服务器的Servlet接口和我写的servlet文件不匹配,从而无法正常运行。
此时的依赖包

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
解决方案
– 方案一
将Tomcat 10换成更早的版本,简单又省事
– 方案二
在maven中导入Tomcat 10对应的jakarta.servlet-api
打开项目中的pom.xml文件,找到<dependencies>内的javax.servlet-api,将其注释或删除
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
然后添加一个新的jakarta.servlet-api
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>4.0.4</version>
<scope>provided</scope>
</dependency>
再点击Load Maven Changes更新maven

重新导入后的依赖包

这样就可以在Tomcat 10中正常使用Servlet-api了。