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

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

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

    posts - 12, comments - 6, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    JSTL詳解--EL表達式

    Posted on 2007-11-02 15:13 oahiq.Max 閱讀(4949) 評論(0)  編輯  收藏 所屬分類: Java
    JSTL詳解--EL表達式
        在 JSP 頁面中,使用標簽庫代替傳統的 Java 片段語言來實現頁面的顯示邏輯已經不是新技術了,然而,由自定義標簽很容易造成重復定義和非標準的實現。鑒于此,出現了 JSTL ( JSP Standard Tag Library )。大多數 JSP 頁面邏輯提供了實現的 JSTL 技術,該技術本身就是一個標簽庫。
    Sun 公司 Java 規范標準的 JSTL 由 apache jakarta 組織負責維護。作為開源的標準技術,它一直在不斷地完善。 JSTL 的發布包有兩個版本: Standard-1.0 Taglib 、 Standard-1.1 Taglib ,它們在使用時是不同的。
    q         Standard-1.0 Taglib ( JSTL1.0 )支持 Servlet2.3 和 JSP1.2 規范, Web 應用服務器 Tomcat4 支持這些規范,而它的發布也在 Tomcat 4.1.24 測試通過了。
    q         Standard-1.1 Taglib ( JSTL1.1 )支持 Servlet2.4 和 JSP2.0 規范, Web 應用服務器 Tomcat5 支持這些規范,它的發布在 Tomcat 5.0.3 測試通過了。
    在本章的介紹中,將以由 Sun 發布的 Standard-1.1 Taglib 標簽庫為主,而 apache jakarta 組織發布的開源標簽庫,可以從 http://jakarta.apache.org/taglibs/ 找到所需要的幫助。 Sun 發布的標準 JSTL1.1 標簽庫有以下幾個標簽:
    q         核心標簽庫:包含 Web 應用的常見工作,比如:循環、表達式賦值、基本輸入輸出等。
    q         國際化標簽庫:用來格式化顯示數據的工作,比如:對不同區域的日期格式化等。
    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 服務器對于 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 應用服務器中使用。
    二 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 控件
    可以看到,對于這些示例,程序設計者完全無需管理它們的類型轉換,在表達式內部都已經處理了。有了 EL 表達式,在 JSP 頁面的編程變得更靈活,也更容易。

     
    主站蜘蛛池模板: a在线观看免费视频| 人成电影网在线观看免费| 久久狠狠躁免费观看| 中文字幕亚洲图片| 国产亚洲精品免费视频播放 | 青春禁区视频在线观看直播免费| 亚洲综合在线观看视频| 99久久精品免费精品国产| 亚洲视频.com| 久久午夜免费视频| 亚洲一区欧洲一区| 国产三级免费电影| 久久久久久噜噜精品免费直播| 国产gv天堂亚洲国产gv刚刚碰| 成人免费区一区二区三区 | 亚洲精品国产免费| 国产精品亚洲精品观看不卡| 丁香花在线观看免费观看| 欧美亚洲国产SUV| 国产国拍精品亚洲AV片| 一级毛片成人免费看免费不卡 | 亚洲精品无码久久久久AV麻豆| 国产无遮挡色视频免费观看性色 | 亚洲AV无码久久寂寞少妇| 1000部拍拍拍18勿入免费凤凰福利| 亚洲精品在线视频观看| 精品剧情v国产在免费线观看| 色www免费视频| 亚洲毛片在线观看| 日韩精品无码人妻免费视频| 国产免费播放一区二区| 91亚洲导航深夜福利| 69成人免费视频无码专区| 国产福利在线观看永久免费| 亚洲精品国产成人99久久| 国内一级一级毛片a免费| 一个人看的www免费高清| 久久精品国产亚洲av高清漫画 | 亚洲 欧洲 视频 伦小说| 久久久久国产成人精品亚洲午夜| 免费无码VA一区二区三区|