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

JSP 中 EL 表達式獲取數據完整指南:從基礎到實戰

     編輯:Java 相關知識

EL 表達式簡介

Expression Language (EL) 是 JSP 2.0 引入的簡化腳本語法,旨在替代繁瑣的 `<%= %>` 腳本片段,提供更簡潔、可讀性更強的數據訪問方式。EL 主要用於 從各種作用域獲取數據並輸出到頁面。

核心語法

基本格式:${expression}

  • . 與 [] 運算符均可訪問屬性:${user.name} ≡ ${user['name']}
  • 自動處理 null 值,不拋出異常,直接輸出空字串
  • 支援算術、關係、邏輯運算:${price * quantity}、${age >= 18}

四大數據源獲取實戰

1. 變量/基本類型

<%-- 在 Servlet 或 JSP 中設置 --%>
<% request.setAttribute("username", "張三"); %>

<!-- 頁面輸出 -->
歡迎您,${username}

2. 陣列與 List 集合

<% 
    String[] cities = {"北京", "上海", "廣州", "深圳"};
    request.setAttribute("cities", cities);
    
    List<String> fruits = Arrays.asList("蘋果", "香蕉", "橘子");
    request.setAttribute("fruits", fruits);
%>

<!-- 索引訪問 -->
第一城市:${cities[0]} <br/>
第二水果:${fruits[1]}

3. Map 集合

<%
    Map<String, Object> userInfo = new HashMap<>();
    userInfo.put("name", "李四");
    userInfo.put("age", 28);
    userInfo.put("email", "lisi@example.com");
    request.setAttribute("userInfo", userInfo);
%>

<!-- 兩種鍵值訪問方式 -->
姓名:${userInfo.name} 或 ${userInfo['name']} <br/>
年齡:${userInfo.age} <br/>
郵箱:${userInfo.email}

4. JavaBean 對象

<%-- User.java --%>
public class User {
    private String name;
    private Address address; // 嵌套對象
    // getter/setter 省略
}

<%--
    Address.java
    private String city;
    private String street;
    // getter/setter
--%>

<% 
    User user = new User();
    user.setName("王五");
    user.setAddress(new Address("上海", "南京路"));
    request.setAttribute("user", user);
%>

<!-- 級聯訪問嵌套屬性 -->
用戶:${user.name} <br/>
城市:${user.address.city} <br/>
街道:${user.address.street}

隱含對象與常用工具

隱含對象說明範例
pageContext頁面上下文,可訪問 request/session/application 等${pageContext.request.contextPath}
param請求參數 Map (單值)${param.id}
paramValues請求參數 Map (多值陣列)${paramValues.ids[0]}
header請求頭 Map${header['User-Agent']}
cookieCookie Map${cookie.JSESSIONID.value}
initParam上下文初始化參數${initParam.configPath}

進階技巧與最佳實踐

1. 空值安全鏈式調用

<!-- 避免 user 或 address 為 null 時拋出 NPE -->
${user?.address?.city ?: "未知城市"}
注意:?. (安全導航) 與 ?: (Elvis 運算符) 需容器支援 EL 3.0+ (Tomcat 8.5+, Jetty 9.3+)

2. 集合操作函數

<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>
長度:${fn:length(list)}
包含:${fn:contains(str, "keyword")}
分割:${fn:split(csvStr, ",")}
替換:${fn:replace(text, "old", "new")}

3. 格式化輸出

<%@ taglib prefix="fmt" uri="https://java.sun.com/jsp/jstl/fmt" %>
日期:<fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/>
數字:<fmt:formatNumber value="${price}" type="currency"/>

常見坑點與避雷指南

  • 找不到屬性:確認 JavaBean 符合規範(無參構造器 + 標準 getter/setter)
  • 中文亂碼:確保 JSP 頁面指令 `<%@ page pageEncoding="UTF-8" %>` 且資料庫/請求編碼一致
  • EL 不生效:檢查 `web.xml` Servlet 版本 ≥ 2.4,且未被 `<%@ page isELIgnored="true" %>` 禁用
  • 屬性名衝突:多作用域同名屬性時,EL 搜尋順序:page → request → session → application

總結

EL 表達式配合 JSTL 標籤庫,能將 JSP 頁面的邏輯代碼降至最低,實現真正的「視圖與控制分離」。掌握其核心語法、隱含對象與進階技巧,是 Java Web 開發者的必備基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved