JSP 一些常看標籤小記(JSTL, EL, OGNL)
Contents
在維護 JSP 舊專案,尤其是 Struts2 系統時,最容易讓人混亂的不是畫面本身,而是同一頁裡可能同時出現 JSTL、EL 和 OGNL。三者看起來都像是在頁面上取值或判斷條件,但背後所屬技術與使用方式其實不同。
三者分別是什麼
JSTL
JSTL 是 JSP Standard Tag Library,也就是 JSP 的標準標籤函式庫,常見像是:
|
|
它本身不是表達式語言,而是標籤庫,通常搭配 EL 一起使用。
EL
EL 是 Expression Language,用來在 JSP 中簡化取值語法,例如:
|
|
它很適合做基本屬性存取與簡單判斷。
OGNL
OGNL 是 Struts2 常見的表達式語言,Struts2 標籤像 <s:property>、<s:if> 多半就是走 OGNL:
|
|
為什麼容易搞混
因為在同一個 JSP 檔案中,你可能同時看到:
<c:if>這種 JSTL 標籤。${...}這種 EL 語法。<s:if test="...">這種 Struts2 標籤與 OGNL。
如果沒有先分清楚「是哪一個標籤在吃哪一種表達式」,很容易寫出語法看起來對、實際卻不會動的頁面。
一個實務判斷方式
我自己會這樣記:
<c:...>大多配 EL。<s:...>大多配 OGNL。- 純 JSP / JSTL 場景,優先想 EL。
像是 Struts2 的 <s:if>,通常就不要直接照 JSTL 的習慣塞 ${...} 進去,而是依照 OGNL 的語法寫條件。
常見踩雷點
1. 在 Struts2 標籤裡混用 EL
這是最常見的問題之一。畫面不一定直接報錯,但結果常常不是你預期的。
2. 把標籤庫和表達式語言當成同一層概念
JSTL 是標籤庫,EL / OGNL 是取值或判斷的語法。先把角色拆開理解,會清楚很多。
小結
JSTL、EL、OGNL 看似都在 JSP 頁面上做資料顯示和條件判斷,但它們不是同一層東西。維護舊 Java Web 專案時,先確認你用的是哪一套標籤,再決定該配 EL 還是 OGNL,會比一邊猜一邊改有效率很多。