我的环境

  • Java 17
  • maven 3
  • Tomcat 10.0.20

BUG 的产生

因为最近在尝试自己通过 servlet 实现一个简易的 SpringMvc 框架,所以遇到了这个访问 404 的问题。

首先我可以确定我的项目时毫无问题的(毕竟直接用 maven 通过模板创建的),因此我肯定这是项目配置的问题。
本来我使用的是这个依赖,想必大家第一次接触 servlet 用的也是这个版本的。但也就是这个 servlet 导致了问题。

1
2
3
4
5
6
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>

随后我找到了官方文档,原来是 tomcat 和 Java 的版本以及依赖是绑定的啊,那好办,我直接换一个 servlet 的版本就成。

于是乎,我熟练地在 maven repository 中找到了 servlet-api 的依赖。不对劲,按照官方的对应表应该是有个 5.0 版本的依赖啊。这怎么最高才 3.0 呢?仔细一看,发现这个依赖已经被官方迁移到 javax.servlet-api 里了。

顺势一点,我来到了 javax.servlet-api 的页面,嗯!??Σ( ° △ °|||)︴这个怎么也没有 5.0 啊。我就又无奈的接着去翻官方文档了。

最终我发现了,这丫的因为版权问题改名叫 jakarta.servlet 了…
详情这里就不再多说了,感兴趣的可以看看下面的这篇文章。

https://www.javacodegeeks.com/2019/05/jakarta-ee-without-javax-world-wont-end-time-either.html

问题解决

将依赖更新到对应版本后 servlet 访问 404 的问起终于是解决了。

1
2
3
4
5
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>10.0.20</version>
</dependency>

https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api