<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    EL表達式詳解

    JSP 頁面中,使用標(biāo)簽庫代替?zhèn)鹘y(tǒng)的 Java 片段語言來實現(xiàn)頁面的顯示邏輯已經(jīng)不是新技術(shù)了,然而,由自定義標(biāo)簽很容易造成重復(fù)定義和非標(biāo)準(zhǔn)的實現(xiàn)。鑒于此,出現(xiàn)了 JSTL JSP Standard Tag Library )。大多數(shù) JSP 頁面邏輯提供了實現(xiàn)的 JSTL 技術(shù),該技術(shù)本身就是一個標(biāo)簽庫。

    Sun 公司 Java 規(guī)范標(biāo)準(zhǔn)的 JSTL apache jakarta 組織負責(zé)維護。作為開源的標(biāo)準(zhǔn)技術(shù),它一直在不斷地完善。 JSTL 的發(fā)布包有兩個版本: Standard-1.0 Taglib Standard-1.1 Taglib ,它們在使用時是不同的。

    q         Standard-1.0 Taglib JSTL1.0 )支持 Servlet2.3 JSP1.2 規(guī)范, Web 應(yīng)用服務(wù)器 Tomcat4 支持這些規(guī)范,而它的發(fā)布也在 Tomcat 4.1.24 測試通過了。

    q         Standard-1.1 Taglib JSTL1.1 )支持 Servlet2.4 JSP2.0 規(guī)范, Web 應(yīng)用服務(wù)器 Tomcat5 支持這些規(guī)范,它的發(fā)布在 Tomcat 5.0.3 測試通過了。

    在本章的介紹中,將以由 Sun 發(fā)布的 Standard-1.1 Taglib 標(biāo)簽庫為主,而 apache jakarta 組織發(fā)布的開源標(biāo)簽庫,可以從 http://jakarta.apache.org/taglibs/ 找到所需要的幫助。 Sun 發(fā)布的標(biāo)準(zhǔn) JSTL1.1 標(biāo)簽庫有以下幾個標(biāo)簽:

    q         核心標(biāo)簽庫:包含 Web 應(yīng)用的常見工作,比如:循環(huán)、表達式賦值、基本輸入輸出等。

    q         國際化標(biāo)簽庫:用來格式化顯示數(shù)據(jù)的工作,比如:對不同區(qū)域的日期格式化等。

    q         數(shù)據(jù)庫標(biāo)簽庫:可以做訪問數(shù)據(jù)庫的工作。

    q         XML 標(biāo)簽庫:用來訪問 XML 文件的工作,這是 JSTL 標(biāo)簽庫的一個特點。

    q         函數(shù)標(biāo)簽庫:用來讀取已經(jīng)定義的某個函數(shù)。

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

    JSTL 標(biāo)簽 庫由標(biāo)簽庫和 EL 表達式語言兩個部分組成。 EL JSTL 1.0 規(guī)范中被引入,當(dāng)時用來作為 Java 表達式來工作,而該表達式必須配合 JSTL 的標(biāo)簽庫才能得到需要的結(jié)果。

    說明:在 JSTL 1.1 規(guī)范中, JSP2.0 容器已經(jīng)能夠獨立的理解任何 EL 表達式。 EL 可以獨立出現(xiàn)在 JSP 頁面的任何角落。本文隨后的內(nèi)容將以 JSTL 1.1 規(guī)范作為介紹的重點。

     JSTL EL表達式語言簡介

    EL 是從 JavaScript 腳本語言得到啟發(fā)的一種表達式語言,它借鑒了 JavaScript 多類型轉(zhuǎn)換無關(guān)性的特點。在使用 EL scope 中得到參數(shù)時可以自動轉(zhuǎn)換類型,因此對于類型的限制更加寬松。 Web 服務(wù)器對于 request 請求參數(shù)通常會以 String 類型來發(fā)送,在得到時使用的 Java 語言腳本就應(yīng)該是 request.getParameter(“XXX”) ,這樣的話,對于實際應(yīng)用還必須進行強制類型轉(zhuǎn)換。而 EL 就將用戶從這種類型轉(zhuǎn)換的繁瑣工作脫離出來,允許用戶直接使用 EL 表達式取得的值,而不用關(guān)心它是什么類型。

    下面的示例就是一個 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 ”部分就是具體表達式內(nèi)容,“ ${} ”將這個表達式內(nèi)容包含在其中作為 EL 表達式的定義。本示例可以在滿足 JSP2.0 規(guī)范的任何 Web 應(yīng)用服務(wù)器中使用。

     EL表達式的默認(rèn)變量

    一個 EL 表達式包含變量和操作符兩個內(nèi)容。任何存在于 JSP 作用范圍的 JavaBean 都可以被轉(zhuǎn)化成 EL 表達式來使用,它所包含的默認(rèn)變量如下:

    1 .默認(rèn)變量 pageScope requestScope sessionScope applicationScope

    4 個默認(rèn)變量包含 Scope 作用范圍的參數(shù)集合,相當(dāng)于被保存在 java.util.Map 中的某個參數(shù)。下面看簡單的示例 2

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

     

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

    ${sessionScope.sampleValue} 

     

    取得保存在 Session 中參數(shù)的 sessionScope 變量的 EL 表達式,“ . ”是 property 訪問操作符,在這里表示從 Session 中取得“鍵”為“ sampleValue ”的參數(shù),并顯示出來。顯示結(jié)果為“ 10 ”。

    2 .默認(rèn)變量 param paramValues

    這兩個默認(rèn)變量包含請求參數(shù)的集合, param 表明請求包含的參數(shù)為單一控件, paramValues 表明請求包含的參數(shù)為控件數(shù)組。下面看一個簡單示例 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 ”的是一套控件數(shù)組,控件名為“ sampleSingleValue ”的是單一控件,通過遞交將請求參數(shù)傳送到 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> 

     

    這是請求轉(zhuǎn)發(fā)到的頁面,通過 EL 表達式的 paramValues 變量得到控件數(shù)組中最后一個控件的遞交參數(shù),通過 EL 表達式的 param 變量得到單一控件的遞交參數(shù)。控件數(shù)組參數(shù)的 EL 表達式使用“ [] ”來指定數(shù)組下標(biāo)。本示例將顯示控件數(shù)組中最后一個控件的值“ 12 ”和單一控件的值“ SingleValue ”。

    3 .默認(rèn)變量 header headerValues

    這兩個默認(rèn)變量包含請求參數(shù)頭部信息的集合, header 變量表示單一頭部信息, headerValues 則表示數(shù)組型的頭部信息。

    4 .默認(rèn)變量 cookie

    包含所有請求的 cookie 集合,集合中的每個對象對應(yīng) javax.servlet.http.Cookie

    5 .默認(rèn)變量 initParam

    包含所有應(yīng)用程序初始化參數(shù)的集合。

    6 .默認(rèn)變量 pageContext

    等價于 page 環(huán)境類 javax.servlet.jsp.PageContext 的實例,用來提供訪問不同的請求參數(shù)。

    11 個默認(rèn)變量幾乎包含了 Web 應(yīng)用的所有基本操作,若一個表達式不使用這些變量而直接使用參數(shù)名,那么就采用就近原則。該表達式將使用最近取得的參數(shù)值。

    三.EL表達式的操作符

    EL表達式中還有許多操作符可以幫助完成各種所需的操作,之前的示例中“.”、“[]”就是其中的兩個,下面將用表9.1來展示所有操作符及它們各自的功能。

    9.1 EL 表達式的操作符

    操作符

    功能和作用

    .

    訪問一個 bean 屬性或者 Map entry

    []

    訪問一個數(shù)組或者鏈表元素

    ()

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

    ? :

    條件語句,比如:條件 ?ifTrue:ifFalse

    如果條件為真,表達式值為前者,反之為后者

    +

    數(shù)學(xué)運算符,加操作

    -

    數(shù)學(xué)運算符,減操作或者對一個值取反

    *

    數(shù)學(xué)運算符,乘操作

    / div

    數(shù)學(xué)運算符,除操作

    % mod

    數(shù)學(xué)運算符,模操作 ( 取余 )

    == 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 、空數(shù)組、 Map 、沒有條目的 Collection 集合

    func(args)

    調(diào)用方法 , func 是方法名, args 是參數(shù),可以沒有,或者有一個、多個參數(shù) . 參數(shù)間用逗號隔開

    這些操作符都是極其有用的,下面通過幾個示例來演示它們的使用方法:

    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 控件 

     

    可以看到,對于這些示例,程序設(shè)計者完全無需管理它們的類型轉(zhuǎn)換,在表達式內(nèi)部都已經(jīng)處理了。有了 EL 表達式,在 JSP 頁面的編程變得更靈活,也更容易。



    posted on 2008-02-05 19:53 々上善若水々 閱讀(62226) 評論(11)  編輯  收藏 所屬分類: JavaWeb

    評論

    # re: EL表達式詳解 [未登錄]  回復(fù)  更多評論   

    hao
    2008-09-23 16:23 | jin

    # re: EL表達式詳解   回復(fù)  更多評論   

    2008-10-13 10:26 | zzq

    # re: EL表達式詳解 [未登錄]  回復(fù)  更多評論   

    非常感謝
    2009-05-31 22:02 | fc

    # re: EL表達式詳解   回復(fù)  更多評論   

    s
    2011-11-23 17:48 | s

    # re: EL表達式詳解   回復(fù)  更多評論   

    謝謝分享,不錯。
    2012-09-10 09:24 | 葉楚鑫

    # re: EL表達式詳解   回復(fù)  更多評論   

    求樓主貼的代碼中 代碼的字體是怎么設(shè)置的 .
    2012-11-16 09:26 | Tony Cai

    # re: EL表達式詳解   回復(fù)  更多評論   

    @Tony Cai
    在eclipse中直接復(fù)制過來就是這樣的。
    2012-11-26 16:34 | 々上善若水々

    # re: EL表達式詳解   回復(fù)  更多評論   

    樓主講解的很詳細。
    2013-01-31 15:08 | 張雪蓮

    # re: EL表達式詳解 [未登錄]  回復(fù)  更多評論   

    如果再加上一段源碼分析就更好了、。。。。好文要頂啊,請問樓主這些東西你一般是從哪看到的?樓主辛苦。
    2013-11-13 10:12 | 天道酬勤

    # re: EL表達式詳解   回復(fù)  更多評論   

    jkk
    2014-04-08 15:49 | jjjj

    # re: EL表達式詳解   回復(fù)  更多評論   

    固定或合計合計
    2015-09-09 13:53 | 方法
    主站蜘蛛池模板: 亚洲日韩国产精品第一页一区| 亚洲成在人线aⅴ免费毛片| 日本媚薬痉挛在线观看免费| 国产成人无码区免费内射一片色欲| 久久国产亚洲精品| 99久久精品国产亚洲| 亚洲成a人片在线观看国产| 免费观看美女用震蛋喷水的视频| 成人免费777777被爆出| 亚洲av中文无码字幕色不卡| 亚洲图片校园春色| 亚洲av日韩av高潮潮喷无码| 亚洲精品美女久久7777777| 久久久久亚洲av无码专区蜜芽| 免费大黄网站在线观看| 成人免费视频小说| 免费H网站在线观看的| 精品久久久久久亚洲综合网| 亚洲日韩在线中文字幕第一页| 免费无码又爽又刺激高潮视频| 亚洲中文字幕无码av| 91嫩草私人成人亚洲影院| 亚洲精品高清无码视频| 夜夜爽免费888视频| baoyu122.永久免费视频| 免费大片av手机看片| 亚洲日本在线播放| 亚洲狠狠久久综合一区77777| 国产免费看插插插视频| 亚洲欧洲免费视频| 中文在线观看永久免费| 国产精品免费在线播放| 国产精品亚洲精品| 亚洲va成无码人在线观看| 亚洲婷婷综合色高清在线| 亚洲春色另类小说| 亚洲欧洲日本国产| 亚洲另类古典武侠| 亚洲av午夜精品无码专区| 亚洲一区二区三区久久| 精品国产日韩久久亚洲|