天天看點

"xxx cannot be cast to jakarta.servlet.Servlet "報錯解決

作者:愷龍

在做jsp的上機時候同學出現了一個500錯誤:com.kailong.servlet.ComputeBill cannot be cast to jaka.servlet.Servlet

"xxx cannot be cast to jakarta.servlet.Servlet "報錯解決

然後因為我用的tomcat是8.xx版本,并沒有出現過這個情況,然後一頓查這個Servlet檔案,從頭分析到尾,在我這能用在同學那就不行。一開始并沒有注意到這個jakarta,隻是一直在想為啥提示這個Servlet檔案不是Servlet嘞,該導的包也導了,web.xml也配置了,各種配置大小寫都查了一遍,然後還是不對,就一直報錯。

然後發現他的jdk是1.8,就想着是不是1.8版本不支援了?果斷換成18版本,然後重新編譯運作,還是這個500報錯。

整了好一會還是不中,然後就看這個tomcat的提示,感覺tomcat會不會有問題,然後去官網查了一下。

"xxx cannot be cast to jakarta.servlet.Servlet "報錯解決

從Tomcat的官方文檔可以看到,Tomcat 10有一個大的變動:jar包從 javax.* 變成了 jakarta.*,這就要求從Tomcat 9 等 遷移到Tomcat 10的時候,要麼做一些代碼改動,要麼借助Tomcat官網提供的遷移工具将編譯好的war變更成用jakarta的。

然後發現問題就好解決了。

之前使用都是servlet-api.jar這個包,對于tomcat10版本的就得換包了。

得換成jakarta.servlet-api和jakarta.servlet.jsp-api這倆包

下載下傳位址:jakarta.servlet-api:https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api/

jakarta.servlet.jsp-api:https://mvnrepository.com/artifact/jakarta.servlet.jsp/jakarta.servlet.jsp-api/

導包之後,把javax.servlet.xx換成jakarta.servlet.xx

"xxx cannot be cast to jakarta.servlet.Servlet "報錯解決

當然還有另外一種方式就是把tomcat降版本,從10.xx降個版本,不過相比于tomcat10.xx新增更多特性,還是用第一種方式,就換個包的方式來解決比較好且合理。

繼續閱讀