JSP 中的 <% ... %> 腳本片段可直接撰寫 Java 語法,if-else 是最基礎的流程控制。本文從單一條件、複合語句、巢狀判斷、多重 else-if 到現代標籤替代方案完整說明。
<%@ page contentType="text/html;charset=UTF-8" %>
<html><body>
<%
int score = 85;
if (score >= 60) {
out.println("及格:" + score);
} else {
out.println("不及格:" + score);
}
%>
</body></html>
重點:大括號 { } 建議恆加,避免單行陳述式日後擴充產生邏輯錯誤。
<%
int x = 10, y = 5;
if (x > 0) {
if (y > 0) {
out.println("第一象限");
} else {
out.println("第四象限");
}
} else {
out.println("非第一/四象限");
}
%>
<%
String grade = "B";
if ("A".equals(grade)) {
out.println("優等");
} else if ("B".equals(grade)) {
out.println("甲等");
} else if ("C".equals(grade)) {
out.println("乙等");
} else {
out.println("其他");
}
%>
字串比較務必用 equals(),切勿用 ==(比較參考位址)。
JSP 2.0+ 建議移除 Java 代碼,改用 <c:if>、<c:choose>:
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<c:if test="${score >= 60}">
及格:${score}
</c:if>
<c:if test="${score < 60}">
不及格:${score}
</c:if>
<!-- 多重互斥條件用 choose -->
<c:choose>
<c:when test="${grade == 'A'}">優等</c:when>
<c:when test="${grade == 'B'}">甲等</c:when>
<c:when test="${grade == 'C'}">乙等</c:when>
<c:otherwise>其他</c:otherwise>
</c:choose>
優點:可讀性高、支援 EL 運算式、無腳本片段安全風險、易於前端設計師維護。
<!-- 簡單二選一 -->
結果:${score >= 60 ? '及格' : '不及格'}
<!-- 巢狀三元(不建議超過兩層) -->
等級:${score >= 90 ? 'A' : (score >= 60 ? 'B' : 'C')}
| 錯誤寫法 | 問題 | 正確寫法 |
|---|---|---|
if (str == "yes") | 字串比較參考 | if ("yes".equals(str)) |
if (flag = true) | 指派而非比較 | if (flag) 或 if (flag == true) |
| 省略大括號 | 後續加行易出錯 | 恆加 { } |
| JSP 混合 HTML 斷行 | 輸出含大量空白 | 用 out.print 或 JSTL |
web.xml 設定 <jsp-config><jsp-property-group><scripting-invalid>true</scripting-invalid>...。${my:checkPermission(user, 'ADMIN')}。