JSP 頁面中 ${expr} 未被解析,核心原因在於 web.xml 的 Servlet 版本聲明決定了 EL 的預設行為。本文梳理各版本聲明語法並給出針對性修復方案。
| 版本 | 聲明範例 | EL 預設 |
|---|---|---|
| 2.2 (DTD) | <!DOCTYPE web-app PUBLIC "-//Sun...//DTD Web Application 2.2//EN" "https://java.sun.com/dtd/web-app_2_2.dtd"> | 關閉 |
| 2.3 (DTD) | <!DOCTYPE web-app PUBLIC "-//Sun...//DTD Web Application 2.3//EN" "https://java.sun.com/dtd/web-app_2_3.dtd"> | 關閉 |
| 2.4 (XSD) | <web-app xmlns="https://java.sun.com/xml/ns/j2ee" ... version="2.4" xsi:schemaLocation=".../web-app_2_4.xsd"> | 開啟 |
| 2.5 (XSD) | <web-app xmlns="https://java.sun.com/xml/ns/javaee" ... version="2.5" xsi:schemaLocation=".../web-app_2_5.xsd"> | 開啟 |
將 web.xml 根元素替換為 2.4 或 2.5 XSD 聲明,重啟應用即可全域啟用 EL,無需修改任何 JSP。
isELIgnored="false"<%@ page isELIgnored="false" %>
放在 JSP 頂部,僅影響當前頁,適合無法修改 web.xml 的舊專案局部修復。
jsp-config 開啟<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>false</el-ignored>
</jsp-property-group>
</jsp-config>
在 web.xml 中添加,對所有 JSP 生效,不升級 Servlet 版本聲明也能生效。
<web-app xmlns="https://java.sun.com/xml/ns/j2ee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
version="2.4"
xsi:schemaLocation="https://java.sun.com/xml/ns/j2ee
https://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
複製替換現有根元素即可,保留內部子元素不變。
web.xml 並保存。${param.name} 的 JSP,確認輸出為參數值而非原文。掌握版本聲明與 EL 行為的對應關係,是 Java Web 開發者必備的基礎排查技能。