通过maven骨架工程maven-archetype-webapp创建好web项目后,原本以为很容易就可以运行起来,没想到却遇到了一些问题。原因就是Tomcat10的servlet-api的包名更换了。
工具/原料
Tomcat10
IDEA
创建web项目
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>ja即枢潋雳vax.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包都变为了jakart锾攒揉敫a。import jakarta.servlet.ServletException;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;
5、重新启动tomcat,正常访问接口。