一 概述 1.EL Expression Language,表達式語言,一種不同於編程語言的語言,用於訪問對象或者為對象賦值,取代JSP頁面中嵌套的java代碼,使頁面風格統一。 2.語法格式 expression既可以是屬性,也可以是字面值,還可以是算術表達式、關係表達式、邏輯表達式、條件表達式等 ...
一 概述
1.EL
Expression Language,表達式語言,一種不同於編程語言的語言,用於訪問對象或者為對象賦值,取代JSP頁面中嵌套的java代碼,使頁面風格統一。
2.語法格式
${expression}
expression既可以是屬性,也可以是字面值,還可以是算術表達式、關係表達式、邏輯表達式、條件表達式等。
3.+
在EL表達式中,“+”只能用作算術運算,不能用來連接字元串。在進行算術運算時,EL嘗試將兩個數據轉化為數字,轉化不成功則拋出異常。
二 禁用EL
低版本的JSP頁面可能不支持EL,需要在頁面中禁用EL,根據作用範圍,禁用有3種方式:
1.禁用單個EL表達式:
\${expression};
2.禁用當前頁面中的EL:
<%@ page isELIgnored="true"%>
3.禁用應用程式中全部頁面或者指定頁面中的EL:
<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> </jsp-config>
三 EL表達式作用
- 可以將字面值輸出到頁面。
- 訪問對象,可以訪問對象中的屬性、成員方法與靜態方法,不可訪問成員變數與靜態變數。屬性不存在時,輸出空字元串,而不是null。
- 可以訪問作用域範圍內的屬性,訪問順序:page、request、session、application,由小到大。
- 可以訪問環境變數:請求參數、初始化參數、消息報頭、cookie。
- ${empty expression}:判斷對象是否為空,為空返回true。
- ${not empty expression}:表達式非空值返回true。
- ${list[0]}:訪問數組或者List集合中的元素,索引越界不會拋出異常或返回null,而是返回空字元串。
- ${map.key}:訪問map集合。
- 支持算術運算:a+b。
- 支持關係運算:對比兩個參數的大小關係。
- 支持邏輯運算:&& ! ||,判斷事件是否成立。
- 支持條件運算:${條件表達式?表達式1:表達式2}:條件表達式為true,執行表達式1,否則執行表達式2。
- EL表達式可以當做普通字元串插入JavaScript代碼中。
四 內置對象
1.使用規則
EL表達式在底層創建了許多對象,這些對象可以在JSP頁面中直接使用。
2.頁面上下文對象pageContext
- 通過pageContext可以獲取其他內置對象,如request/session/out/exception/page/application,不可以獲得config。
- 獲取到其他內置對象以後,可以獲取其屬性,如pageContext.request.contentLength。
3.作用域範圍的隱含對象
- 包括:pageScope/requestScope/sessionScope/applicationScope。
- 可以訪問作用域範圍內保存的數據,不可以訪問具有getter方法的屬性。
4.環境信息的隱含對象
- param:訪問請求參數。
- paramValues:當一個請求參數包含多個值時使用,以數組存儲。
- header:用於獲取HTTP請求頭的值。
- headValues:當一個請求頭包含多個值時使用,以數組存儲。
- initParam:獲取初始化參數的值。
- cookie:訪問Cookie對象。
五 自定義EL函數
1.自定義函數的一般步驟
- 創建一個類,在類中創建一個有返回值的靜態方法。
- 編寫標簽庫描述文件.tld,將編寫好的文件放在WEB-INF目錄下。
2.標簽庫描述文件
<?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"> <description>JSTL 1.1 functions library</description> <display-name>JSTL functions</display-name> <tlib-version>1.1</tlib-version> <short-name>fn</short-name> <uri>http://java.sun.com/jsp/jstl/myFunctions</uri><!-- 聲明時使用 --> <function> <description> Tests if an input string contains the specified substring. </description> <name>contains</name><!-- 調用時使用的名稱 --> <function-class>org.apache.taglibs.standard.functions.Functions</function-class><!-- 自定義類的全限定性類名 --> <!-- 無論是返回值,還是形參,都必須使用全限定性類名 --> <function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature> </function> </taglib>
3.使用
首先在jsp頁面中引入標簽庫:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/myFunctions"%>
使用語法同EL相同:
${fn:functionName(arg...)}
4.作用
取代JSP頁面中的java代碼,使頁面風格統一,更加簡潔。