Servlet版本衝突導致頁面404

allworldg發表於2022-02-16

入門servlet前先準備好了Tomcat環境以及用Idea打了一個Servlet war包想看看效果,結果發現頁面跳轉一直報404錯誤,檢查了跳轉url,專案結構等情況後,問題依舊沒有解決。最後偶然在網上看到了相關資訊後終於找到問題原因。

原因

一直沒有關注Java EE相關更新新聞,查詢後才明白Servlet5.0已經將包名稱空間從javax變成了jakarta,這就導致如果Tomcat裡Servlex版本如果是最新版,而本地編譯環境是早期版本,那麼Tomcat解war包後程式無法正確通過import找到相關jar包。

解決方法

  1. 首先檢查Servlet版本是否相同。

    1. 本地編譯依賴環境可以直接開啟pom.xml檢視為4.0。

    2. Tomcat則需要先解壓以下檔案 ${baseDir}\apache-tomcat-10.0.16\lib\servlet-api.jar,然後檢視META-INF資料夾下的MANIFEST.MF,可以看出版本為5.0。
      image-20220216085845891

    3. 修改pom.xml的Servlet依賴,改成5.0即可。

       <dependency>
                  <groupId>jakarta.servlet</groupId>
                  <artifactId>jakarta.servlet-api</artifactId>
                  <version>5.0.0</version>
                  <scope>provided</scope>
       </dependency>
      

相關文章