最近在想复习一下servlet 刚好家里新买了一台mac,于是就把所有开发软件都装上了最新版。
intellij:2020,JDK:14, Tomcat:10
然后就碰上了Tomcat10这个玩意。
新建了一个Maven项目配置了Tomcat10之后页面跑起来正常。
一切看起来很Nice
但是!!
在之后我写servlet之后引入servlet-api 不管是3.0之前的版本还是最新版4.0.1都会报错。
(解释一下关于servlet的报名不同:3.0之前叫servlet-api 3.0之后改名叫Java.servlet-api了)
报错信息我就不截图了
大概是:javax.servlet is not cast to jaraka.servlet.
然后再次访问就变成了404
解决我大半天,下面把我的解决心路历程记录下来:
首先排查404的错误,我反复检查了servlet的配置,也尝试写了注解方法请求
都发现没问题啊。
有时也会报class not found : javax.servlet
然后检查了引入的dependcy
从4.01改到了3.0,之后设置了dependcy的作用范围provided:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
然后就在怀疑maven自动导入的servlet包难道没有生效吗
就把maven进来的包各种挪动位置:
这里:
这里:
这里:
都试了。都没用。
要么404.要么javax.servletclass is not found 要么is not cast to jaraka.servlet.
我哭了。
等我去洗个澡回来。
突然醒悟!!
jaraka是个什么什么鬼!!!
于是去tomcat10的lib里面看了一眼servlet-api.jar这个包
这玩意里面的servlet包名竟然不是叫javax!!是jaraka
难怪报错信息是javax.servlet can not cast to jaraka.servlet
ok,找到问题了。
接下去把Tomcat10的servlet-api.jar导入到项目的lib下就OK了:
漂亮!折腾了我滴娘亲啊、
或者把整个Tomct10的lib引进来也是可以。
记录一下记录一下 用Tomcat10的朋友可以借鉴一下。
如果大佬有更好的办法也可以指点一下我。
-------------------------------------------------
后记:
我把Tomcat换成了9.0.34,maven完美匹配依赖的servlet包,再也不用手动去导包了。
还是Tomcat9舒服~