在 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
說明:在 JSTL 1.1 規範中, JSP2.0 容器已經可以獨立的理解不論什麼 EL 表達式。 EL 可以獨立出現在 JSP 頁面的不論什麼角落。本文隨後的內容將以 JSTL 1.1 規範做爲介紹的重點。
EL 是從 JavaScript 腳本語言獲得啓示的一種表達式語言,它借鑑了 JavaScript 多類型轉換無關性的特色。在使用 EL 從 scope 中獲得參數時可以本身主動轉換類型,所以對於類型的限制更加寬鬆。 Web server對於 request 請求參數通常會以 String 類型來發送,在獲得時使用的 Java 語言腳本就應該是 request.getParameter(「XXX」) ,這種話。對於實際應用還必須進行強制類型轉換。而 EL 就將用戶從這種類型轉換的繁瑣工做脫離出來,贊成用戶直接使用 EL 表達式取得的值,而不用關心它是什麼類型。
如下的演示樣例就是一個 EL 表達式,見例 1 。
例 1 :簡單 EL 表達式
這個演示樣例將在 JSP 頁面顯示爲「 1 」, EL 表達式必須以「 ${XXX} 」來表示。當中「 XXX 」部分就是詳細表達式內容。「 ${} 」將這個表達式內容包括在當中做爲 EL 表達式的定義。本演示樣例可以在知足 JSP2.0 規範的不論什麼 Web 應用server中使用。
一個 EL 表達式包括變量和操做符兩個內容。
不論什麼存在於 JSP 做用範圍的 JavaBean 都可以被轉化成 EL 表達式來使用,它所包括的默認變量例如如下:
1 .默認變量 pageScope 、 requestScope 、 sessionScope 、 applicationScope
這 4 個默認變量包括 Scope 做用範圍的參數集合,至關於被保存在 java.util.Map 中的某個參數。
如下看簡單的演示樣例 2 :
例 2 :使用 sessionScope 變量的 EL 表達式
取得保存在 Session 中參數的 sessionScope 變量的 EL 表達式,「 . 」是 property 訪問操做符,在這裏表示從 Session 中取得「鍵」爲「 sampleValue 」的參數,並顯示出來。顯示結果爲「 10 」。
2 .默認變量 param 、 paramValues
這兩個默認變量包括請求參數的集合。 param 代表請求包括的參數爲單一控件。 paramValues 代表請求包括的參數爲控件數組。如下看一個簡單演示樣例 3 :
例 3 :提交請求的頁面和接受的頁面
在這個頁面中定義了兩組控件。控件名爲「 sampleValue 」的是一套控件數組,控件名爲「 sampleSingleValue 」的是單一控件,經過遞交將請求參數傳送到 SampleJsp.jsp 。
<%@ page contentType="text/html; charset=UTF-8"%>
這是請求轉發到的頁面,經過 EL 表達式的 paramValues 變量獲得控件數組中最後一個控件的遞交參數。經過 EL 表達式的 param 變量獲得單一控件的遞交參數。
控件數組參數的 EL 表達式使用「 [] 」來指定數組下標。本
3 .默認變量 header 、 headerValues
這兩個默認變量包括請求參數頭部信息的集合, header 變量表示單一頭部信息。 headerValues 則表示數組型的頭部信息。
4 .默認變量 cookie
包括所有請求的 cookie 集合,集合中的每個對象相應 javax.servlet.http.Cookie 。
5 .默認變量 initParam
包括所有應用程序初始化參數的集合。
6 .默認變量 pageContext
等價於 page 環境類 javax.servlet.jsp.PageContext 的實例,用來提供訪問不一樣的請求參數。
11 個默認
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 |
邏輯運算符。推斷符號左邊是否
|
>= 或 ge |
邏輯運算符。推斷
|
&& 或 and |
邏輯運算符,與操做賦。 假設左右兩邊同爲 true 返回 true ,不然返回 false |
|| 或 or |
邏輯運算符,或操做賦。假設左右兩邊有不論什麼一邊爲 true 返回 true ,不然返回 false |
! 或 not |
邏輯運算符。非操做賦。假設對 true 取運算返回 false ,不然返回 true |
empty |
用來對一個空變量值進行推斷 : null 、一個空 String 、空數組、 空 Map 、沒有條目的 Collection 集合 |
func(args) |
調用方法 , func 是方法名, args 是參數,可以沒有,或者有一個、多個參數 . 參數間用逗號隔開 |
這些操做符都是極事實上用的,如下經過幾個演示樣例來演示它們的用法:
例 4 :幾組