JSTL詳解(一)

          概述

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

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

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

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

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

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

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

          q???????? 數據庫標簽庫:可以做訪問數據庫的工作。

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

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

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

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

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

          9.2.1? JSTL EL 表達式語言簡介

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

          下面的示例就是一個 EL 表達式,見例 9.1

          9.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 規(guī)范的任何 Web 應用服務器中使用。

          9.2.2? EL 表達式的默認變量

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

          1 .默認變量 pageScope requestScope sessionScope applicationScope

          4 個默認變量包含 Scope 作用范圍的參數集合,相當于被保存在 java.util.Map 中的某個參數。下面看簡單的示例 9.2

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

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

          ${sessionScope.sampleValue}

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

          2 .默認變量 param paramValues

          這兩個默認變量包含請求參數的集合, param 表明請求包含的參數為單一控件, paramValues 表明請求包含的參數為控件數組。下面看一個簡單示例 9.3

          9.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>

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

          3 .默認變量 header headerValues

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

          4 .默認變量 cookie

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

          5 .默認變量 initParam

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

          6 .默認變量 pageContext

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

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



          posted on 2007-01-18 09:57 nbt 閱讀(4274) 評論(1)  編輯  收藏 所屬分類: Servele&JSP和js

          評論

          # re: JSTL詳解(一) 2010-03-31 15:24 若夜

          不錯,蠻詳細的!!!  回復  更多評論   

          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導航

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          Java技術網站

          友情鏈接

          國內一些開源網站

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 西华县| 广饶县| 工布江达县| 泊头市| 天台县| 松阳县| 淳化县| 玉林市| 洪泽县| 昆明市| 涞源县| 讷河市| 修武县| 徐闻县| 门头沟区| 农安县| 汉川市| 松滋市| 繁昌县| 宿迁市| 闻喜县| 隆尧县| 永和县| 通渭县| 北碚区| 宁夏| 当阳市| 封丘县| 梨树县| 洛川县| 常德市| 西青区| 桂林市| 泊头市| 偃师市| 银川市| 德化县| 衡阳市| 石渠县| 富民县| 开江县|