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

Java EE 實戰:EL 表達式調用自定義 Java 靜態方法完整指南

     編輯:Java 綜合教學

Java EE 實戰:EL 表達式調用自定義 Java 靜態方法完整指南

在 JSP 頁面中,EL 表達式 ${...} 默認只能訪問 JavaBean 屬性、集合、隱含對象等。若需在 EL 中直接調用 Java 類的靜態方法(如 URL 編碼、日期格式化、字符串處理),必須通過自定義標簽庫實現。

實現步驟

1. 編寫工具類(公共靜態方法)

package com.tsh.utils;

import java.net.URLEncoder;

public class ELFunc {
    public static String urlEncode(String str) {
        return URLEncoder.encode(str);
    }
}

2. 定義 TLD 標簽庫描述文件

位置:WEB-INF/el-func.tld(不在 lib/classes 目錄下)

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" 
        xmlns="https://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://java.sun.com/xml/ns/j2ee https://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
    
    <tlib-version>1.0</tlib-version>
    <short-name>ELFunc</short-name>
    <uri>https://www.tsh.com/ELFunc</uri>  <!-- 唯一標識,JSP 中引用 -->
    
    <function>
        <name>urlEncode</name>                    <!-- EL 中調用的方法名 -->
        <function-class>com.tsh.utils.ELFunc</function-class> <!-- 實現類全限定名 -->
        <function-signature>java.lang.String urlEncode(java.lang.String)</function-signature> <!-- 簽名:返回類型 方法名(參數類型) -->
    </function>
</taglib>

3. JSP 頁面引入並使用

<%@ taglib uri="https://www.tsh.com/ELFunc" prefix="ELFunc" %>

<!-- 對比:傳統 Scriptlet vs EL 調用 -->
<%= URLEncoder.encode("陶士涵") %> 
${ELFunc:urlEncode("陶士涵") }

輸出均為:%E9%99%B6%E5%A3%AB%E6%B6%B5

進階:使用 JSTL 標準函數庫

無需自定義,直接使用 Apache 提供的標準函數庫(需導入 jstl.jar 和 standard.jar 到 Tomcat lib 或項目中)。

配置步驟

  1. 下載 JSTL 壓縮包,將 jstl.jar、standard.jar 放入 Tomcat/lib 或 WEB-INF/lib。
  2. 將 JSTL 自帶的 TLD 文件(如 fn.tld)複製到 WEB-INF 目錄(可選,現代容器自動掃描 JAR 中的 META-INF/*.tld)。
  3. JSP 引入:<%@ taglib uri="https://java.sun.com/jsp/jstl/functions" prefix="fn" %>

常用函數示例

${fn:toUpperCase("hello")}           <!-- HELLO -->
${fn:toLowerCase("WORLD")}            <!-- world -->
${fn:substring("abcdef", 1, 4)}       <!-- bcd -->
${fn:contains("hello world", "lo")}   <!-- true -->
${fn:length(list)}                    <!-- 集合/數組長度 -->
${fn:escapeXml("
")} <!-- &lt;div&gt; 防 XSS --> ${fn:replace("a-b-c", "-", ",")} <!-- a,b,c --> ${fn:split("a,b,c", ",")} <!-- 返回 String[] --> ${fn:join(arr, ";")} <!-- 字符串數組拼接 -->

核心注意點

  • 方法必須為 public static,否則 TLD 解析失敗。
  • 簽名必須精確匹配:包含完整包名的返回類型、方法名、參數類型列表(無參則空括號)。
  • URI 唯一性:TLD 中的 <uri> 必須與 JSP taglib 指令的 uri 完全一致。
  • 無參方法調用:EL 中仍需帶空括號 ${prefix:methodName()},不可省略。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved