搜尋
首頁Javajava教程分享一個JSP頁面技術之EL表達式整理歸納總結

這篇文章主要介紹了java中JSP頁面技術之EL表達式概念作用以及語法等的使用,需要的朋友可以參考

##一、概念

#表達式語言(Expression Language),或稱為EL表達式,簡稱EL,是Java中的一種特殊的通用程式語言,借鑑於JavaScript和XPath。主要作用是在Java Web應用程式嵌入到網頁(如JSP)中,用以存取頁面的上下文以及不同作用域中的物件 ,取得物件屬性的值,或執行簡單的運算或判斷操作。 EL在得到某個資料時,會自動進行資料型別的轉換。

主要作用:

1) 取得資料

EL表達式主要用於取代JSP頁面中的腳本表達式,以從各種類型的web域擷取java物件、取得資料。 (某個web域中的對象,存取javabean的屬性、存取list集合、存取map集合、存取陣列)

#2) 執行運算

利用EL表達式可以在JSP頁面中執行一些基本的關係運算、邏輯運算和算術運算,以便在JSP頁面中完成一些簡單的邏輯運算。 ${user==null}

3) 取得web開發常用對象EL

#表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以輕鬆取得web常用物件的引用,從而獲得這些物件中的資料。

4) 呼叫Java方法

EL表達式可讓使用者開發自訂EL函數,以在JSP頁面中透過EL表達式呼叫Java類別的方法。

注意 表示是否停用EL語言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中預設的啟用EL語言

二、語法

以「${」開始,以「}」結束:

# ${EL表達式}

實例:

${ str } //输出字符串变量str的值
${ 1 + 2 } //输出1+2的结果
${ user.name} //输出user对象的name属性 访问对象user的getName()方法以得到name成员的值。
${user[“name”] } //同上
${ sessionScope[“user”].name } //同上
${list[0]} //访问list对象的第一项。
${map[“key”]} //访问map指定键的值。

三、取運算元##EL提供.和[ ] 兩個運算子來存取資料:

. 存取一個Bean屬性或一個映射條目如:${ user.name}

[ ] 可以存取集合或是陣列的元素、也可以存取Bean的屬性。 如:${ arr[0].name}

異同:

相同:可以用來存取物件的屬性

#差異:當要訪問的屬性名稱包含一些特殊字符,如. 或? 或- 等非字母或數字的符號,就一定要使用[],如

user.my-name應{user[“my-name” ]}

四、運算子:

● 算術運算子有五個:+、-、*、/或p、%或mod

● 關係運算子有六個:==或eq、!=或ne、或gt、=或ge

●邏輯運算子有三個:&&或and、||或or、!或not

● 其它運算子有三個:Empty運算子、條件運算子、()運算子

五、隱含物件

JSP EL支援下表所列的隱含物件:

可以在表達式中使用像變數一樣使用這些物件。

依功能分組如下:

1) 存取參數值:

param : 可取得對應單一請求參數名的值。如:$(param.name) 相當於 request.getParameter (name)。

paramValues: 可根據參數名稱取得對於的字串陣列。如:${paramvalues.name) 相當於 request.getParamterValues(name)。

註:param物件傳回單一的字串,而paramValues物件則傳回一個字串陣列。

2) 存取頭資訊

header:可以取得請求頭資訊中,對應的單一字串頭值。表達式 header.name相當於request.getHeader(name)。如{header[“user-agent”]}。可列印出 user-agent 訊息頭。

headerValues:可將請求頭名稱對應到數值陣列。如 ${headerValues.name} 相當於 request.getHeaderValues(name)。

附註

:header物件傳回單一值,而headerValues則傳回字串陣列。

3) 存取其他有關使用者要求或頁面的詳細資訊

pageContext:

##pageContext.request|取得請求物件{pageContext.session} |取得session物件

pageContext.request.queryString|取得請求的參數字串{pageContext.request.requestURL} |取得請求的URL,但不包含請求之參數字串

pageContext.request.contextPath|服務的webapplication的名稱{pageContext.request.method} |取得HTTP的方法(GET、POST)

pageContext.request.protocol|取得使用的協定(GET、POST)

pageContext.request.protocol|取得使用的協定( HTTP/1.1、HTTP/1.0){pageContext.request.remoteUser} |取得使用者名稱

pageContext.request.remoteAddr|取得用户的IP地址{pageContext.session.new} |判断session是否为新的,所谓新的session,表示刚由 server产生而client尚未使用 的

pageContext.session.id|取得session的ID{pageContext.servletContext.serverInfo}|取得主机端的服务信息

4)访问不同作用域的变量,如 Web 上下文、会话、请求、页面:

pageScope :取得页面范围的值

如用 pageScope.objectName访问一个JSP中页面范围的对象,还可以使用{pageScope.objectName.attributeName} 访问对象的属性。

requestScope:取得请求范围的变量值

该对象允许访问请求对象的属性。如用 requestScope.objectName访问一个JSP请求范围的对象,还可以使用{requestScope.objectName.attributeName} 访问对象的属性。

sessionScope:取得会话范围的变量值

该对象允许访问会话对象的属性。如:$sessionScope.name}

applicationScope:取得应用程序范围的变量值

该隐式对象允许访问应用程序范围的对象

5) 访问Cookie中的值

如要取得cookie中有一个设定名称为username的值,可以使用${cookie.username} 来取得它。

六、使用sun提供的标准 EL函数库

由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用。

这些EL函数在JSTL开发包中进行描述,因此在JSP页面中使用SUN公司的EL函数库,需要导入JSTL开发包,并在页面中导入EL函数库。

使用EL函数库

1) 导入 jstl jar包

2) 在相应的jsp页面添加引用

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %>
<!--导入需要使用taglib指令 --> 
 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>el function demo</title>
</head>
<body>
 
   <%
       String[] strs = {"a","b","c"};//定义一个字符数组
       List list = new ArrayList();//定义一个list集合
       list.add("a");//向集合中添加一个字符
       pageContext.setAttribute("arr", strs);//将字符数据以arr的名字保存在page域中
       pageContext.setAttribute("list", list);//将list集合以list的名字保存在page域中
    %>
 
${fn:length(arr) }<br/><!--3-->
${fn:length(list) }<br/><!--1-->
${fn:toLowerCase("Hello") }<br/> <!-- hello -->
${fn:toUpperCase("Hello") }<br/> <!-- HELLO -->
${fn:contains("abc", "a")}<br/><!-- true -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- true -->
${fn:contains(arr, "a")}<br/><!-- true -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->
${fn:join(arr, ";")}<br/><!-- a;b;c -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World -->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->
${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->
${fn:trim("   a b c   ")}<br/><!-- a b c -->
${fn:escapeXml("<html></html>")}<br/> <!-- <html></html> --> 
</body>
</html>

函数库详细介绍

String toUpperCase(String input):把字符串参数转换成大写,并返回

String toLowerCase(String input):把字符串参数转换成小写,并返回

int indexOf(String input, String substring):返回input中substring出现的索引位置

boolean contains(String input, String substring):查看input中是否包含substring,包含返回true,否则返回false;

boolean containsIgnoreCase(String input, String substring):在忽略大小写的情况下,查看input中是否包含substring,包含返回true,否则返回false

boolean startsWith(String input, String substring):判断input是否是以substring为前缀,如果是就返回true,否则就返回false

boolean endsWith(String input, String substring):判断input是否是以substring为后缀,如果是就返回true,否则就返回false

String substring(String input, int beginIndex, int endIndex):以beginIndex为开始值,endIndex为结束值,在input上截取子串

String substringAfter(String input, String substring):获取input中,substring所在位置后面的字符串

substringBefore(String input, String substring):获取input中,substring所在位置前面的字符串 String escapeXml(String input):把input中““、”&“、”'“、“””进行转义;

String trim(String input):去除input中的前后空格;

String replace(String input, String substringBefore, String substringAfter):将input中的substringBefore替换成substringAfter;

String[] split(String input, String delimiters):以delimiters为标识分割input,返回一个字符串数组;

int length(Object obj):可以获取字符串、数组、各种集合的长度;

String join(String array[], String separator):将array数组中的元素以separator连接起来,返回一个字符串

七、EL调用自定义函数 (调用普通类的静态方法)

EL很强大,除了使用SUN提供的标准EL函数库外,还可以调用自定义函数:

● EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。语法:${prefix:method(params)}

● 在EL表达式中调用的只能是Java类的静态方法,这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。

● EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。

EL Function开发步骤

只要实现以下三个步骤就可以在静态页面中用${prefix:method(params)} 调用自定义function了

编写一个Java类的静态方法

编写标签库描述符(tld)文件,在tld文件中描述自定义函数。

在JSP页面中导入和使用自定义函数

下面来个案例:

1)编写一个Java类的静态方法

public class GetMax {
  public static int togetMax(int a, int b){
    return a>b?a:b;
  }
}

2)编写标签库描述符(tld)

<?xml version="1.0" encoding="UTF-8"?> 
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 
version="2.0">  
  <tlib-version>1.0</tlib-version><!-- 定义的版本 --> 
  <short-name>mytaglib</short-name><!--这个名字可以随便取,尽量与文件名相同,这样我们知道文件在哪儿 并与prefix对应--> 
  <uri>http://localhost:8080/springmvc-1</uri><!-- 这个地址是随便取得。到时候jsp页面引入这个地址 -->          
  <function><!-- 定义函数 --> 
    <name>toGetMax</name>
    <function-class>elfunction.GetMax</function-class><!-- 定义函数的类全名称 --> 
    <function-signature>int toGetMax(int,int)</function-signature> 
    <!--说明 返回值类型 函数名 以及 参数类型 --> 
  </function> 
</taglib>

3)在web.xml中指定tld文件的位置(这步可以省略,因为应用会自动找到 /WEB-INF/下的tld文件)

<jsp-config> 
    <taglib> 
      <!-- 此处uri可以自己随便定义,但后面用时一定与这里一样 --> 
      <taglib-uri> 
        http://localhost:8080/springmvc-1
      </taglib-uri> 
      <!-- tld文件的路径 --> 
      <taglib-location> 
        /WEB-INF/tags/mytaglib.tld
      </taglib-location> 
    </taglib> 
  </jsp-config>

4)在JSP页面中导入和使用自定义函数

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 
<%@ taglib uri="http://localhost:8080/springmvc-1" prefix="mytaglib"%> 
<!-- prefix 是前缀的意思,应与mytaglib.tld中的<short-name>对应 -->
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>custom EL function test</title>
</head>
<body>
  1和2求最大值 = ${mytaglib:toGetMax(1,2)}
</body>
</html>

运行截图

以上是分享一個JSP頁面技術之EL表達式整理歸納總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境