JSTL詳解

概述 

在JSP頁面中,使用標籤庫代替傳統的Java片斷語言來實現頁面的顯示邏輯已經不是新技術了,然而,由自定義標籤很容易形成重複定義和非標準的實現。鑑於此,出現了JSTL(JSP Standard Tag Library)。大多數JSP頁面邏輯提供了實現的JSTL技術,該技術自己就是一個標籤庫。 Sun公司Java規範標準的JSTL由apache jakarta組織負責維護。做爲開源的標準技術,它一直在不斷地完善。JSTL的發佈包有兩個版本:Standard-1.0 Taglib、Standard-1.1 Taglib,它們在使用時是不一樣的。 Standard-1.0 Taglib(JSTL1.0)支持Servlet2.3和JSP1.2規範,Web應用服務器Tomcat4支持這些規範,而它的發佈也在Tomcat 4.1.24測試經過了。 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規範做爲介紹的重點。 9.2.1 JSTL EL 表達式語言簡介 EL是從JavaScript腳本語言獲得啓發的一種表達式語言,它借鑑了JavaScript多類型轉換無關性的特色。在使用EL從scope中獲得參數時能夠自動轉換類型,所以對於類型的限制更加寬鬆。Web服務器對於request請求參數一般會以String類型來發送,在獲得時使用的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規範的任何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> 這是請求轉發到的頁面,經過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應用的全部基本操做,若一個表達式不使用這些變量而直接使用參數名,那麼就採用就近原則。該表達式將使用最近取得的參數值。
相關文章
相關標籤/搜索