修改 JSP 後熱刷新拋出長堆疊異常,核心提示:
java.lang.NoSuchFieldError: deferredExpression
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.release(ForEachSupport.java:178)
at org.apache.jasper.runtime.TagHandlerPool.release(TagHandlerPool.java:166)
...
WEB-INF/lib 下存在多個版本的 JSTL 實現 JAR(如 jstl-1.2.jar、standard-1.1.2.jar、javax.servlet.jsp.jstl-api-1.2.1.jar 同時存在),導致類加載器加載到不兼容的 ForEachSupport 類,字段 deferredExpression 缺失。
WEB-INF/lib,刪除多餘/舊版 JSTL JAR,僅保留一套匹配的 API + 實現:jstl-1.2.jar(含 API 與實現)javax.servlet.jsp.jstl-api-1.2.1.jar + javax.servlet.jsp.jstl-1.2.1.jarmvn clean / Eclipse Project → Clean。<!-- Maven 統一依賴,避免傳遞衝突 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 若容器已提供 API,標記 provided -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
<version>1.2.1</version>
<scope>provided</scope>
</dependency>
重新部署後,JSP 熱刷新正常,<c:forEach> 迭代無異常。