记一次@WebServlet不生效的问题
背景
废话不多说,在用idea生成的web应用中,通过tomcat启动之后,无法访问@WebServlet定义的Servlet,报404错误
问题定位过程
由于项目是个demo,直接通过idea生成,理论上直接就可以用了。然后百度了一下,回答都是以下两种原因
- web.xml协议版本太低,要3.0以上才支持
- metadata-complete要设置为false
我检查了我的项目,版本是4.0,metadata-complete没有设置,但我看定义说明,默认就不需要设置
后面还是按照别人的回答去设置了,重新启动,一样的效果
看来是别人的问题点跟我的不一样,需要重新定位。
我不再用@WebServlet注解,直接在web.xml里面配置servlet看下是不是注解有问题
<?xml version="1.0" encoding="UTF-8"?>
helloServlet
zhugr.demo.simpleWeb.HelloServlet
helloServlet
/*
重启,重新访问,报错,不过还好,这是另外一个错了
这是说类没找到,这种问题一般是版本冲突导致的,我找了本地tomcat的servlet看,原来是tomcat的版本和原本项目的版本冲突了。。。
我的tomcat版本是10.0.8(通过homebrew安装),这么高的版本用的jdk不再是javax的命名空间,而是jakarta,个中缘由可以看下这个贴:
https://fangshixiang.blog.csdn.net/article/details/118403779
至此问题终于找到了,把maven的servlet引入改为下面GAV即可(类中接口的引入也要变更):
jakarta.servlet
jakarta.servlet-api
5.0.0
provided