首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SpringMVC 專案啟動報 AbstractMethodError: JspFactory.getJspApplicationContext

     編輯:程式設計綜合問答

錯誤堆疊

java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext
    at org.apache.jasper.compiler.Validator$ValidateVisitor.(Validator.java:514)
    ...

根本原因

JSP API 版本衝突:專案依賴的 javax.servlet.jsp:jsp-api 版本與執行環境 (Tomcat) 內建的 JSP 實作 (Jasper) 版本不相容。常見於:

  • Maven/Gradle 將 jsp-api 打包進 WEB-INF/lib (scope 非 provided)。
  • 多個 Web 模組合併部署,類別載入器載入錯誤版本。
  • Tomcat 版本升級但專案依賴未同步更新。

解決方案

方案一:排除打包 jsp-api (最常見修正)

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope> <!-- 關鍵:由容器提供,不打包 -->
</dependency>

方案二:檢查 dependency tree 找出傳遞性依賴

mvn dependency:tree | grep jsp-api
# 找出引入它的模組,排除
<exclusions>
    <exclusion>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
    </exclusion>
</exclusions>

方案三:統一 Servlet/JSP 版本與 Tomcat 對應

TomcatServletJSPEL
10.1.x6.03.15.0
9.0.x4.02.33.0
8.5.x3.12.33.0
7.0.x3.02.22.2

確認 web.xml version 屬性與 Tomcat 版本一致。

方案四:清理工作目錄

  • 刪除 Tomcat work/Catalina/localhost/<context> 目錄 (編譯後的 JSP Servlet 快取)。
  • Maven clean 後重新部署。

快速驗證

# 確認 WEB-INF/lib 無 jsp-api*.jar
ls WEB-INF/lib/ | grep jsp-api
# 應無輸出

將 jsp-api 設為 provided 並清理編譯快取,通常即可解決 AbstractMethodError。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved