EL表達式具體解釋

JSP 頁面中,使用標籤庫取代傳統的 Java 片斷語言來實現頁面的顯示邏輯已經不是新技術了,然而。由本身定義標籤很是easy形成反覆定義和非標準的實現。鑑於此。出現了 JSTL JSP Standard Tag Library )。html

大多數 JSP 頁面邏輯提供了實現的 JSTL 技術。該技術自己就是一個標籤庫。 java

Sun 公司 Java 規範標準的 JSTL apache jakarta 組織負責維護。數據庫

做爲開源的標準技術。它一直在不斷地無缺。 JSTL 的公佈包有兩個版本號: Standard-1.0 Taglib Standard-1.1 Taglib ,它們在使用時是不一樣的。apache

q         Standard-1.0 Taglib JSTL1.0 )支持 Servlet2.3 JSP1.2 規範。 Web 應用server Tomcat4 支持這些規範,而它的公佈也在 Tomcat 4.1.24 測試經過了。數組

q         Standard-1.1 Taglib JSTL1.1 )支持 Servlet2.4 JSP2.0 規範, Web 應用server Tomcat5 支持這些規範。它的公佈在 Tomcat 5.0.3 測試經過了。 cookie

在本章的介紹中,將以由 Sun 公佈的 Standard-1.1 Taglib 標籤庫爲主。而 apache jakarta 組織公佈的開源標籤庫。可以從 http://jakarta.apache.org/taglibs/ 找到所需要的幫助。 Sun 公佈的標準 JSTL1.1 標籤庫有如下幾個標籤: session

q         核心標籤庫:包括 Web 應用的常見工做,比方:循環、表達式賦值、基本輸入輸出等。app

q         國際化標籤庫:用來格式化顯示數據的工做,比方:對不一樣區域的日期格式化等。 jsp

q         數據庫標籤庫:可以作訪問數據庫的工做。函數

q         XML 標籤庫:用來訪問 XML 文件的工做,這是 JSTL 標籤庫的一個特色。

q         函數標籤庫:用來讀取已經定義的某個函數。

此外, JSTL 還提供了 EL 表達式語言( Expression Language )來進行輔助的工做。

JSTL 標籤 庫由標籤庫和 EL 表達式語言兩個部分組成。 EL JSTL 1.0 規範中被引入。當時用來做爲 Java 表達式來工做。而該表達式必須配合 JSTL 的標籤庫才幹獲得需要的結果。

說明:在 JSTL 1.1 規範中, JSP2.0 容器已經可以獨立的理解不論什麼 EL 表達式。 EL 可以獨立出現在 JSP 頁面的不論什麼角落。本文隨後的內容將以 JSTL 1.1 規範做爲介紹的重點。

 JSTL EL表達式語言簡單介紹

EL 是從 JavaScript 腳本語言獲得啓示的一種表達式語言,它借鑑了 JavaScript 多類型轉換無關性的特色。在使用 EL scope 中獲得參數時可以本身主動轉換類型,所以對於類型的限制更加寬鬆。 Web server對於 request 請求參數通常會以 String 類型來發送,在獲得時使用的 Java 語言腳本就應該是 request.getParameter(「XXX」) ,這種話。對於實際應用還必須進行強制類型轉換。而 EL 就將用戶從這種類型轉換的繁瑣工做脫離出來,贊成用戶直接使用 EL 表達式取得的值,而不用關心它是什麼類型。

如下的演示樣例就是一個 EL 表達式,見例 1

1 :簡單 EL 表達式

 

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

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

< html >  

 
< body >  

    ${sampleValue + 1} 
< br >  

 
</ body >  

</ html >  

 

這個演示樣例將在 JSP 頁面顯示爲「 1 」, EL 表達式必須以「 ${XXX} 」來表示。當中「 XXX 」部分就是詳細表達式內容。「 ${} 」將這個表達式內容包括在當中做爲 EL 表達式的定義。本演示樣例可以在知足 JSP2.0 規範的不論什麼 Web 應用server中使用。

 EL表達式的默認變量

一個 EL 表達式包括變量和操做符兩個內容。

不論什麼存在於 JSP 做用範圍的 JavaBean 都可以被轉化成 EL 表達式來使用,它所包括的默認變量例如如下:

1 .默認變量 pageScope requestScope sessionScope applicationScope

4 個默認變量包括 Scope 做用範圍的參數集合,至關於被保存在 java.util.Map 中的某個參數。

如下看簡單的演示樣例 2

2 :使用 sessionScope 變量的 EL 表達式

 

<% request.getSession().setAttribute("sampleValue"new Integer(10)); %>  

${sessionScope.sampleValue} 

 

取得保存在 Session 中參數的 sessionScope 變量的 EL 表達式,「 . 」是 property 訪問操做符,在這裏表示從 Session 中取得「鍵」爲「 sampleValue 」的參數,並顯示出來。顯示結果爲「 10 」。

2 .默認變量 param paramValues

這兩個默認變量包括請求參數的集合。 param 代表請求包括的參數爲單一控件。 paramValues 代表請求包括的參數爲控件數組。如下看一個簡單演示樣例 3

3 :提交請求的頁面和接受的頁面

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

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

< html >  

 
< body >  

      
< form  action ="SampleJsp.jsp" >  

    
< input  type ="text"  name ="sampleValue"  value ="10" >  

    
< input  type ="text"  name ="sampleValue"  value ="11" >  

    
< input  type ="text"  name ="sampleValue"  value ="12" >  

    
< input  type ="text"  name ="sampleSingleValue"  value ="SingleValue" >  

    
< input  type ="submit"  value ="Submit" >  

    
</ form >  

 
</ body >  

</ html >  


 

在這個頁面中定義了兩組控件。控件名爲「 sampleValue 」的是一套控件數組,控件名爲「 sampleSingleValue 」的是單一控件,經過遞交將請求參數傳送到 SampleJsp.jsp

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

 

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

< html >  

 
< body >  

    ${paramValues.sampleValue[2]} 
< br >  

    ${param.sampleSingleValue} 
< br >  

 
</ body >  

</ html >  

 

這是請求轉發到的頁面,經過 EL 表達式的 paramValues 變量獲得控件數組中最後一個控件的遞交參數。經過 EL 表達式的 param 變量獲得單一控件的遞交參數。

控件數組參數的 EL 表達式使用「 [] 」來指定數組下標。本 演示樣例 將顯示控件數組中最後一個控件的值「 12 」和單一控件的值「 SingleValue 」。

3 .默認變量 header headerValues

這兩個默認變量包括請求參數頭部信息的集合, header 變量表示單一頭部信息。 headerValues 則表示數組型的頭部信息。

4 .默認變量 cookie

包括所有請求的 cookie 集合,集合中的每個對象相應 javax.servlet.http.Cookie

5 .默認變量 initParam

包括所有應用程序初始化參數的集合。

6 .默認變量 pageContext

等價於 page 環境類 javax.servlet.jsp.PageContext 的實例,用來提供訪問不一樣的請求參數。

11 個默認 變量 差點兒包括了 Web 應用的所有基本操做,若一個 表達式 不使用這些變量而直接使用 參數 名,那麼就採用就近原則。該表達式將使用近期取得的參數值。

三.EL表達式的操做符

EL表達式中還有不少操做符可以幫助完畢各類所需的操做,以前的演示樣例中「.」、「[]」就是當中的兩個,如下將用表9.1來展現所有操做符及它們各自的功能。

9.1 EL 表達式的操做符

操做符

功能和做用

.

訪問一個 bean 屬性或者 Map entry

[]

訪問一個數組或者鏈表元素

()

對子表達式分組,用來改變賦值順序

? :

條件語句。比方:條件 ?

ifTrue:ifFalse

假設條件爲真,表達式值爲前者。反之爲後者

+

數學運算符。加操做

-

數學運算符。減操做或者對一個值取反

*

數學運算符,乘操做

/ div

數學運算符,除操做

% mod

數學運算符,模操做 ( 取餘 )

== 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

用來對一個空變量值進行推斷 : null 、一個空 String 、空數組、 Map 、沒有條目的 Collection 集合

func(args)

調用方法 , func 是方法名, args 是參數,可以沒有,或者有一個、多個參數 . 參數間用逗號隔開

這些操做符都是極事實上用的,如下經過幾個演示樣例來演示它們的用法:

4 :幾組 操做符 的演示樣例

 

${pageScope.sampleValue + 12}  < br >            // 顯示 12 

${(pageScope.sampleValue + 12)/3} 
< br >      // 顯示 4.0 

${(pageScope.sampleValue + 12) /3==4} 
< br >          // 顯示 true 

${(pageScope.sampleValue + 12) /3>=5} 
< br >          // 顯示 false 

< input  type ="text"  name ="sample1"  value ="${pageScope.sampleValue + 10}" >  // 顯示值爲 10 的 Text 控件 
相關文章
相關標籤/搜索