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

JSP switch-case 語句用法詳解與現代替代方案

     編輯:關於JSP

JSP Scriptlet 中可直接使用 Java switch 語句,適合「單一變數對多個定值」的分支情境。本文說明語法、貫穿特性、字串支援(Java 7+)、Enum 搭配,並推薦 JSTL <c:choose> 替代腳本片段。

一、基本語法

<%@ page contentType="text/html;charset=UTF-8" %>
<%
    int day = 3; // 0=Sun ... 6=Sat
    switch (day) {
        case 0: out.println("星期日"); break;
        case 1: out.println("星期一"); break;
        case 2: out.println("星期二"); break;
        case 3: out.println("星期三"); break;
        case 4: out.println("星期四"); break;
        case 5: out.println("星期五"); break;
        case 6: out.println("星期六"); break;
        default: out.println("無效日期");
    }
%>

關鍵字: break 終止貫穿;default 捕獲未匹配值。

二、貫穿特性合併多個 Case

<%
    int temp = 64;
    switch (temp) {
        case 60: case 61: case 62:
            out.println("太冷"); break;
        case 63: case 64: case 65:
            out.println("涼爽"); break;
        case 66: case 67: case 68: case 69:
            out.println("舒適"); break;
        case 70: case 71: case 72: case 73: case 74: case 75:
            out.println("溫暖"); break;
        default:
            out.println("炎熱");
    }
%>

多個 case 連寫共用同一區塊,減少重複代碼。

三、Java 7+ 支援 String Switch

<%
    String method = "GET";
    switch (method) {
        case "GET":    out.println("查詢"); break;
        case "POST":   out.println("新增"); break;
        case "PUT":    out.println("修改"); break;
        case "DELETE": out.println("刪除"); break;
        default:       out.println("不支援");
    }
%>

編譯器內部透過 hashCode + equals 實現,效能優於連續 if-else。

四、搭配 Enum(型別安全)

public enum OrderStatus { NEW, PAID, SHIPPED, DONE, CANCELLED }

// JSP
<%
    OrderStatus status = OrderStatus.PAID;
    switch (status) {
        case NEW:      out.println("新訂單"); break;
        case PAID:     out.println("已付款"); break;
        case SHIPPED:  out.println("已出貨"); break;
        case DONE:     out.println("完成"); break;
        case CANCELLED:out.println("取消"); break;
    }
%>

Enum switch 編譯期檢查完整性,避免漏寫 case。

五、JSTL <c:choose> 替代方案(推薦)

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<c:choose>
    <c:when test="${day == 0}">星期日</c:when>
    <c:when test="${day == 1}">星期一</c:when>
    <c:when test="${day == 2}">星期二</c:when>
    <c:when test="${day == 3}">星期三</c:when>
    <c:when test="${day == 4}">星期四</c:when>
    <c:when test="${day == 5}">星期五</c:when>
    <c:when test="${day == 6}">星期六</c:when>
    <c:otherwise>無效日期</c:otherwise>
</c:choose>

優點:無 Scriptlet、EL 運算式可讀、支援複雜條件(${user.role == 'ADMIN' and user.active})。

六、效能與選型建議

場景建議
整數/Enum/字串 等值多分支Java switch(Scriptlet)或 JSTL choose
範圍判斷、複合條件if-else / JSTL choose
高效能熱路徑Controller 處理完傳結果,JSP 只顯示
現代專案禁用 Scriptlet,全面 JSTL/EL/Thymeleaf

七、常見錯誤

  • 忘記 break 導致非預期貫穿。
  • case 後接變數而非常量(需為編譯期常量)。
  • Java 6 以前嘗試 switch(String) 編譯失敗。
  • JSP 中 out.println 產生換行,HTML 輸出建議用 out.print 配合標籤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved