IDEA创建web项目,tomcat10运行错误解决方法
1、选择IDEA的File→New→Project创建项目,
然后选择maven-archetype-webapp骨架工程来创建web项目


2、编写HelloServlet,并配置好web.xml,pom配置文件只留下servlet-api包

1、编译打包,配置好tomcat运行后,访问servlet请求接口,结果出错:
java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet
提示是明显没有找到HttpServlet类。

2、这里我们想到之前在pom里面的servlet-api包配置
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
scope我们选择了provided,也就是代表这个包由容器提供,现在容器不提供了。
这里我们选择File→Project Structure→Modules
将里面的maven依赖范围选择compile,重新启动tomcat。

3、访问servlet请求接口,还是出错:
java.lang.ClassCastException: class org.example.HelloServlet cannot be cast to class jakarta.servlet.Servlet (org.example.HelloServlet is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @193b9e97; jakarta.servlet.Servlet is in unnamed module of loader java.net.URLClassLoader @a38d7a3)
这个错误,看上去像是包冲突的错误,
所以这里我们选择File→Project Structure→Modules
将里面的maven包替换成Tomcat的包。

4、此时,你编写的Servlet会出错,你需要重新导入包。
你会发现原本的javax包都变为了jakarta。
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
5、重新启动tomcat,正常访问接口。

1、Tomcat10自带的servlet-ap的jar包,里面的包名进行了变更,导致如果写的代码引用的是javax.servlet.http.HttpServlet类,会访问不到,必须要引用jakarta.servlet.http.HttpServlet包才行。