最近在想複習一下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.servlet class 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舒服~