EL表達式、基本語法、隱式對象,禁用EL表達式,EL主要作用

EL表達式、基本語法、隱式對象,禁用EL表達式,EL主要作用

背景:

JSP表達式語言(Expression Language),簡稱EL,最初定義在JSTL1.0規範中,直到JSP2.0之後,EL表達式才正式成爲JSP規範中的一部分。EL爲存取變量、表達式運算和讀取內置對象等內容提供了新的操作方式。

EL表達式的目的是爲了使JSP頁面編寫起來更簡單。

EL表達式概述、EL表達式的基本語法EL表達式的隱式對象、禁用EL表達式

EL表達式是爲了便於獲取數據而定義的一種語言,JSP 2.0之後才成爲一種標準。下面的示例是一個簡單的EL表達式:

<%@ page contentType="text/html; charset=UTF-8"%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

<html> 

<body> 

${stuno + 1} <br> 

</body> 

</html>

EL表達式必須以“${XXX}”來表示,其中“XXX”部分就是具體表達式內容,“${}”將這個表達式內容包含在其中,作爲EL表達式的定義。

EL表達式的基本語法

EL表達式的出現讓Web的顯示層發生了大的變革,EL表達式用於獲取數據,在JSP 2.0之後成爲一種標準,是由JSP 標準標籤庫專家組和JSP 2.0 專家組開發。

EL表達式的語法格式: ${標識符}

JSP頁面中使用的形式,通知JSP引擎調用pageContext.findAttribute()方法,以標識符爲關鍵字從各個域對象中獲取對象。如果域對象中不存在標識符所對應的對象,則返回結果爲“”(注意,不是null)。

語法結構

JSP EL用於以下情形

靜態文本

標準標籤和自定義標籤(可以作爲元素屬性的值,也可以在自定義或者 標準動作元素的內容中使用)

EL不能在腳本元素中使用

[].運算符

EL提供(.)([])兩種運算符來存取數據,即使用點運算符(.)和方括號運算符([])

點運算符和方括號運算符可以實現某種程度的互換,如${student.name}等價於${student [name]}

當要存取的屬性名稱中包含一些特殊字符,如.?等並非字母或數字的符號時,就一定要使用[]。例如${student.name }應當改爲${student[name] }

如果要動態取值,就可以用[]來做,而.無法做到動態取值。例如${sessionScope.student[data]}data是一個變量。

變量

EL存取變量數據的方法很簡單,例如${username}。它的意思是取出某一範圍中名稱爲username的變量。

屬性範圍 EL中的名稱

page pageScope

request requestScope

session sessionScope

application applicationScope

文字常量

一個EL表達式包含變量、文字常量、操作符。文字常量主要包括字符串、數字和布爾值、還有NULL,其中

字符串是由任何由單引號或雙引號引起來的一串字符。

數字常量包括整型、浮點型,整型表示十進制、十六進制和八進制類型的值,浮點型與Java類似,可以包含任何正的或者負的浮點數。

布爾型包括truefalse

${true} ${10} ${10.5f} ${hello} ${null}

操作符

EL表達式的操作符主要有

算術運算符

關係運算符

邏輯運算符

驗證運算符empty

條件運算符

算術運算符

算術運算符主要有平時常用的“+”、“-”、“*”、“/”、“%” 。

關係運算符

關係運算符主要有“==”、“!=”、“<”、“>”、“<=”、“>=

== eq 判斷符號兩邊是否相等,相等返回true,否則返回false

!= ne 判斷符號兩邊是否不相等,不相等返回true,否則返回false

lt 判斷符號左邊是否小於右邊,如果小於返回true,否則返回false

gt 判斷符號左邊是否小於右邊,如果小於返回true,否則返回false

<= le 判斷符號左邊是否小於或者等於右邊,如果小於或者等於返回true,否則返回false

>= ge 判斷符號左邊是否大於或者等於右邊,如果大於或者等於返回true,否則返回false

邏輯運算符

邏輯運算符主要有“&&”、“||”、“!” 。

&& 或 and 與運算符,如果符號兩邊均爲true,則返回true,否則返回false

|| 或 or 或運算符,如果符號兩邊任何一邊爲true,則返回true,否則返回false

或 not 非運算符,在運算結果爲true的時候,則返回false,否則返回true

驗證運算符“empty”與條件運算符“?:

empty empty作爲前綴,用來檢索一個值是否爲null或者empty。如${empty user.name}用來判斷user對象中的name的值是否爲null

? ${條件 ? truevalue:falsevalue},如果條件爲真,則表達式的值爲truevalue,否則爲falsevalue

EL表達式的隱式對象

EL表達式中共有11個隱式對象

與作用範圍有關的EL隱含對象包含有:pageScoperequestScopesessionScopeapplicationScope

它們可以讀取使用JSP內置對象pageContextrequestsession以及applicationsetAttribute()方法所設定的對象的數值-----getAttribute(String name),卻不能取得其他相關信息。

例如,要取得session中儲存的一個username屬性的值,可以利用下面的方法:session.getAttribute("username")

EL中則使用下面的方法:${sessionScope.username}

注意:如果沒有設定使用EL內置對象的作用範圍,則按照pageScoperequestScopesessionScopeapplicationScope的先後順序讀取屬性值。

即,通知JSP引擎調用pageContext.findAttribute()方法,以標識符爲關鍵字從各個域對象中獲取對象。如果域對象中不存在標識符所對應的對象,則返回結果爲“”(注意,不是null)。

與輸入有關的隱含對象有兩個,即paramparamValues,它們是EL中比較特別的隱含對象。例如,要取得用戶的請求參數時,可以利用下列方法:

request.getParameter(String name)

request.getParameterValues(String name)

EL中則可以使用paramparamValues兩者來取得數據:

${param.name}

${paramValues.name}(這時可同時使用[]運算符號來讀取哪個元素,例如${paramValues.week[0]}

其他隱式對象

cookie

用來取得使用者的cookie值,例如在cookie中設定了username屬性值,可以使用${cookie.username.value}來取得屬性值。

headerheaderValues

讀取請求的頭數據,使用headerheaderValues內置對象,例如${header[User-Agent]}headerValues則用來取得所有的頭信息,等價於調用request.getHeaders()方法。

initParam

initParam用來讀取設置在web.xml中的參數值。例如${initParam.repeat},等價於:(String)application.getInitParameter(repeat);  
servletContext.getInitParameter(repeat);

pageContext

pageContext用於取得其他有關用戶要求或頁面的詳細信息

${pageContext.request.queryString} 取得請求的參數字符串

${pageContext.request.requestURL} 取得請求的URL,不包括參數字符串

${pageContext.request.contextPath}         服務的web application 的名稱

${pageContext.request.method}           取得HTTP 的方法(GETPOST)

${pageContext.request.protocol}         取得使用的協議(HTTP/1.1HTTP/1.0)

${pageContext.request.remoteUser}         取得用戶名稱

${pageContext.request.remoteAddr }         取得用戶的IP 地址

${pageContext.session.new}             判斷session 是否爲新的

${pageContext.session.id}               取得session ID

${pageContext.servletContext.serverInfo}   取得主機端的服務信息

禁 用 EL

JSP 2.0中默認是啓用EL表達式的,但如果在JSP頁面中使用了與JSP EL標記符相沖突的其他技術,可以通過使用page指令的isELIgnored屬性來忽略JSP EL的標識符。

<%@page isELIgnored="true|false"%>

true:表示忽略對EL表達式進行計算。

false:表示計算EL表達式。

isELIgnored默認爲false

還可以修改web.xml來決定當前的web應用不使用JSP EL

<jsp-config>

<jsp-property-group>

<url-pattern>*.jsp</url-pattern>

<el-ignored>true</el-ignore>

</jsp-property-group>

</jsp-config>

Web.xml中的<el-ignored>標記用來預設所有JSP網頁是否使用JSP EL,如果web.xmlpage制定都進行了設定,page指令的設定優先級要高。

EL主要作用:

獲取數據:

EL表達式主要用於替換JSP頁面中的腳本表達式,以從各種類型的web域 中檢索java對象、獲取數據。(某個web域 中的對象,訪問javabean的屬性、訪問list集合、訪問map集合、訪問數組)

執行運算:

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

獲取web開發常用對象

EL 表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以很輕鬆獲得對web常用對象的引用,從而獲得這些對象中的數據。

使用EL表達式獲取數據語法:“${標識符}

EL表達式語句在執行時,會調用pageContext.findAttribute方法,用標識符爲關鍵字,分別從pagerequestsessionapplication四個域中查找相應的對象,找到則返回相應對象,找不到則返回”” (注意,不是null,而是空字符串)。 

示例:${user}

EL表達式也可以很輕鬆獲取JavaBean的屬性,或獲取數組、CollectionMap類型集合的數據,例如:

${user.address.city}

${user.list[0]}:訪問有序集合某個位置的元素

${map.key}  : 獲得map集合中指定key的值

結合JSTLforeach標籤,使用EL表達式也可以很輕鬆迭代各種類型的數組或集合,示例:

迭代數組

迭代collection類型集合

迭代map類型集合

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章