引用html
【轟隆隆】 的 JAVA標籤庫JSTL-EL表達式介紹使用配置手冊
JSP 標準標記庫(JSP Standard Tag Library,JSTL)是一個實現 Web 應用程序中常見的通用功能的定製標記庫集,這些功能包括迭代和條件判斷、數據管理格式化、XML 操做以及數據庫訪問。java
JSTL是一個不斷完善的開放源代碼的JSP標籤庫,是由apache的jakarta小組來維護的。JSTL只能運行在支持JSP1.2和Servlet2.3規範的容器上,如tomcat 4.x。可是在即將推出的JSP 2.0中是做爲標準支持的。
JSTL目前的最新版本爲1.02,最終發佈版爲1.0。JSTL包含兩個部分:標籤庫和EL(Expression Language表達式語言)語言。標籤庫目前支持四種標籤:
標籤 URI 前綴 示例 Core http://java.sun.com/jstl/core c XML processing http://java.sun.com/jstl/xml x I18N capable formatting http://java.sun.com/jstl/fmt fmt Database access (SQL) http://java.sun.com/jstl/sql sql
Core支持JSP中的一些基本的操做;
XML processing支持XML文檔的處理;
I18N capable formatting支持對JSP頁面的國際化;
Database access (SQL)支持JSP對數據庫的操做。
版本web
要注意1.0.x和1.1.x兩個版本,目前最新版分別爲1.0.6和1.1.2sql
1.1版比1.0版多了fn標籤庫(經常使用的字符串操做在裏面,特別是length、substring、等用於顯示的函數)數據庫
各個版本均可以在apache網站下載獲得apache
使用中注意的問題編程
在僅支持JSP1.2規範的容器中,只能使用jstl 1.0版,因此fn就不能用了,很不爽。${1 + 2}必面都要寫在裏。在支持JSP2.0規範的容器中,能夠直接使用el表達式。數組
一些BUGtomcat
在websphere 6.0(6.0.2.13版之前)中,有fn:length函數的BUG。只有打補丁了。cookie
在websphere 中,如這樣的句子會出問題,tomcat下剛運行很好。應該是:jstl只是一個規範,各個web容器對其實現不一樣的緣由吧。
一 JSTL使用配置總結
1.web.xml版本爲2.3版本的配置
引用文檔:http://blog.csdn.net/tiancaoyan/archive/2009/06/10/4256637.aspx
使用環境: WebLogic92 + JDK1.5,web.xml版本爲2.3, 文件是以下表示:
使用步驟:
l 拷貝jstl.jar,standard.jar文件到Web-INF/lib目錄下
l 在引用JSP頁面加上: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
l 如web.xml版本爲2.3,還要在加上: <%@ page isELIgnored="false"%>
2 web.xml版本爲2.4的配置
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
l 拷貝jstl.jar,standard.jar文件到Web-INF/lib目錄下
l 在引用JSP頁面加上: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3 web.xml版本爲2.5的配置
在J2EE5.0中已經將JSTL歸入標準規範,將jstl.jar,standard.jar二個jar文件合併爲jstl1.2.jar.
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
l 在引用JSP頁面加上: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
以上的web.xml各個版本在Tomcat6.0.24下也能正常顯示.
二 JSTL使用示例
JSTL獲取值範圍.
引用文檔:http://blog.csdn.net/tiancaoyan/archive/2009/06/10/4256637.aspx
一個EL表達式包含變量和操做符。任何存儲在某個JSP做用範圍(如:page、 request、session、application)的bean能被做爲一個EL變量來使用。另外,EL支持如下預約義的變量:
變量名稱
說明
pageScope
一個包含全部page scope範圍的變量集合 (a java.util.Map)
requestScope
一個包含全部request scope範圍的變量集合 (a java.util.Map)
sessionScope
一個包含全部session scope範圍的變量集合 (a java.util.Map)
applicationScope
一個包含全部application scope範圍的變量集合 (a java.util.Map)
param
一個包含全部請求參數的集合 (a java.util.Map),經過每一個參數對應一個String值的方式賦值
paramValues
一個包含全部請求參數的集合 (a java.util.Map),經過每一個參數對應一個String數組的方式賦值
header
一個包含全部請求的頭信息的集合, (a java.util.Map) ,經過每一個頭信息對應一個String值的方式賦值
headerValues
一個包含全部請求的頭信息的集合 (a java.util.Map) ,經過每一個頭信息的值都保存在一個String數組的方式賦值
cookie
一個包含全部請求的 cookie集合 (a java.util.Map), 經過每個cookie(javax.servlet.http.Cookie)對應一個cookie值的方式賦值
initParam
一個包含全部應用程序初始化參數的集合(a java.util.Map) ,經過每一個參數分別對應一個String值的方式賦值
pageContext
一個javax.servlet.jsp.PageContext類的實例, 用來提供訪問不一樣的請求數據
操做符描述了你對變量所指望的操做。若是你以前曾經使用過任何編程語言的話,在EL表達式中所使用的操做符對你來講可能看起來很熟悉。由於它們和那些在大多數語言中所支持的操做符同樣。
.
訪問一個bean屬性或者 Map entry
[]
訪問一個數組或者鏈表元素
()
對子表達式分組,用來改變賦值順序
? :
條件語句,好比: 條件 ? ifTrue : ifFalse.若是條件爲真,表達式值爲前者,反之爲後者
+
數學運算符,加操做
-
數學運算符,減操做或者對一個值取反
*
數學運算符,乘操做
/ or div
數學運算符,除操做
% or mod
數學運算符,模操做(取餘)
== or eq
邏輯運算符,判斷符號左右兩端是否相等,若是相等返回true,不然返回false
!= or ne
邏輯運算符,判斷符號左右兩端是否不相等,若是不相等返回true,不然返回false
< or lt
邏輯運算符,判斷符號左邊是否小於右邊,若是小於返回true,不然返回false
> or gt
邏輯運算符,判斷符號左邊是否大於右邊,若是大於返回true,不然返回false
<= or le
邏輯運算符,判斷符號左邊是否小於或者等於右邊,若是小於或者等於返回true,不然返回false
>= or ge
邏輯運算符,判斷符號左邊是否大於或者等於右邊,若是大於或者等於返回true,不然返回false
&& or and
邏輯運算符,與操做賦。若是左右兩邊同爲true返回true,不然返回false
|| or or
邏輯運算符,或操做賦。若是左右兩邊有任何一邊爲true返回true,不然返回false
! or not
邏輯運算符,非操做賦。若是對true取運算返回false,不然返回true
empty
用來對一個空變量值進行判斷: null、一個空String、空數組、空Map、沒有條目的Collection集合
func(args)
調用方法, func是方法名,args是參數,能夠沒有,或者有一個、多個參數.參數間用逗號隔開
一個EL表達式能夠包含:數字、文本(在單引號或者雙引號之間)、布爾值、null值。
1 獲取單個對象
<%request.setAttribute(「username」,」david」)%>
${requestScope.userName}
2遍歷Map類型
<%
Hashtable hashtable1 = new Hashtable();
hashtable1.put(new Integer(1), "uno");
hashtable1.put(new Integer(2), "dos");
hashtable1.put(new Integer(3), "tres");
request.setAttribute("numberMap", hashtable1);
//JSTL最好指定範圍訪問值:
// ${sessionScope. numberMap2},${ applicationScope. numberMap2}.
request.getSession().setAttribute("numberMap2",hashtable1); request.getSession()
.getServletContext().setAttribute("numberMap3",hashtable1);
%>
<c:forEach var="month" items="${numberMap}">
<li>
${month.key}, ${month.value}
li>
c:forEach>
各JSTL相關引用標記
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
下面介紹一下web.xml的配置
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
http://java.sun.com/jstl/fmt
/WEB-INF/tlds/fmt.tld
http://java.sun.com/jstl/fmt-rt
/WEB-INF/tlds/fmt-rt.tld
http://java.sun.com/jstl/core
/WEB-INF/tlds/c.tld
http://java.sun.com/jstl/core-rt
/WEB-INF/tlds/c-rt.tld
http://java.sun.com/jstl/sql
/WEB-INF/tlds/sql.tld
http://java.sun.com/jstl/sql-rt
/WEB-INF/tlds/sql-rt.tld
http://java.sun.com/jstl/x
/WEB-INF/tlds/x.tld
http://java.sun.com/jstl/x-rt
/WEB-INF/tlds/x-rt.tld
JSTL語法及參數詳解
JSTL語法及參數
JSTL包含如下的標籤:
經常使用的標籤:如、、、等
條件標籤:如、、等
URL標籤:如、和等
XML標籤:如等
國際化輸出標籤:如等
SQL標籤:如、、等通常用途的標籤:
1.
沒有Body時的語法
有Body時的語法
這裏是Body部分
名字 類型 描述value Object 將要輸出的表達式
escapeXml boolean 肯定如下字符:<,>,&,’,」在字符串中是否被除數,默認爲true
default Object 若是vaule計算後的結果是null,那麼輸出這個默認值
2.這個標籤用於在某個範圍(page、request、session、application等)中使用某個名字設定特定的值,或者設定某個已經存在的javabean對象的屬性。他相似於<%request.setAttrbute(「name」,」value」);%>
語法1:使用value屬性設定一個特定範圍中的屬性。
語法2:使用value屬性設定一個特定範圍中的屬性,並帶有一個Body。
Body部分
語法3:設置某個特定對象的一個屬性。
語法4:設置某個特定對象的一個屬性,並帶有一個Body。
Body部分
名字 類型 描述value Object 將要計算的表到式。
var String 用於表示value 值的屬性,若是要在其餘標籤中使用,就是經過這 個var指定的值來進行的。它至關於在標籤訂義了一個變量,而且這個變量只能在標籤中的一個。
scope String var的有效範圍,能夠是page|request|session|application中的一個
target String 將要設置屬性的對象,它必須是javabean或則java.util.Map對象
property Object 待設定的Target對象中的屬性名字,好比在javabean中有個name屬性,提供了setUserId方法,那麼這裏填userId。
3.
4.這個標籤至關於捕獲在它裏邊的標籤拋出的異常對象
//var是異常的名字
內容
條件標籤1.
語法1:無Body狀況
語法2:有Body的狀況
Body內容
名字 類型 描述test Boolean 表達式的條件,至關於if()中的條件判斷語句。
var String 表示這個語句的名字。
scope String var這個變量的做用範圍。
2.語法:
Body內容(和子標籤)
注意:它的Body只能由如下元素組成:
1) 空格
2) 0或多個子標籤,必須在標籤以前出現.
3) 0個或多個子標籤。
3.表明的是的一個條件分支,只能在中使用
語法: //test是boolean類型,用於判斷條件真假
Body語句
4.表明的是中的最後選擇。必須在最後出現
內容
迭代標籤1.
語法1:在Collection中迭代
[begin=」begin」] [end=」end」] [step=」step」]
Body內容
語法2:迭代固定的次數.[begin=」begin」] [end=」end」] [step=」step」]
Body內容
名字 類型 描述var String 迭代的參數,它是標籤參數,在其餘標籤中經過它來引用這個標籤中的內容。
Items Collection、ArrayList、 要迭代的items集合.
Iterator、Map、String、
Eunmeration等
VarStatus String 表示迭代的狀態,能夠訪問迭代自身的信息
Begin int 表示開始迭代的位置。
End int 表示結束迭代的位置。
Step int 表示迭代移動的步長,默認爲1。
URL相關的標籤1.
語法1:資源的內容使用String對象向外暴露
[var=」varName」] [scope=」{page|request|session|application}」] [charEncoding=」charEncoding」]>
內容
語法2:資源的內容使用Reader對象向外暴露。varReader=」varReaderName」 [charEncoding=」charEncoding」]>
內容
名字 類型 描述
url String 待導入資源的URL,能夠是相對路徑和絕對路徑,而且能夠導入其餘主機資源
context String 當使用相對路徑訪問外部context資源時,context指定了這個資源的名字。
var String 參數的名字。
scope String var參數的做用範圍。
cahrEncoding String 輸入資源的字符編碼。
varReader String 這個參數的類型是Reader,用於讀取資源。
2.語法1:沒有Body的狀況.
語法2:有Body狀況下,在Body中指定查詢的參數
3.語法1:沒有Body
語法2:有Body
名字 類型 描述value String URL值
context String 當使用相對路徑訪問外部context資源時,context指定了這個資源的名字
var String 標識這個URL標量。
Scope String 變量做用範圍。
SQL相關的標籤1.
2.
3.
4.
5.
jstl之foreach循環舉例:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
JSTL測試1--c:forEach循環
1、整數
,
2、計算x的平方
Value Square
3、字符串"47,52,53,55,46,22,16,2" 分隔.
4、使用步長
second second
5、對數組進行循環
<% int ai[] = {10, 20, 30, 40, 50};
pageContext.setAttribute("ary", ai);
%>
*
<%
Cookie c=new Cookie("cookie1","one");
response.addCookie(c);
%>
<%
Cookie cookies[]=request.getCookies();
Cookie sCookie=null;
String sname=null;
String name=null;
if(cookies==null) // 若是沒有任何cookie
out.print("none any cookie");
else
{
//out.print(cookies.length + "
");
for(int i=0;i {
sCookie=cookies[i];
sname=sCookie.getName();
name = sCookie.getValue();
out.println(sname + "->" + name + "
");
}
}
%>
Cookie Name Cookie Value
6、字符串數組循環
<% String as[] = {
"A first string", "La deuxieme string", "Ella troisiemo stringo"
};
request.setAttribute("stringArray", as);
%>
7、枚舉
<%
Hashtable hashtable1 = new Hashtable();
pageContext.setAttribute("numberMap", hashtable1);
hashtable1.put(new Integer(1), "uno");
hashtable1.put(new Integer(2), "dos");
hashtable1.put(new Integer(3), "tres");
hashtable1.put(new Integer(4), "cuatro");
hashtable1.put(new Integer(5), "cinco");
hashtable1.put(new Integer(6), "seis");
hashtable1.put(new Integer(7), "siete");
hashtable1.put(new Integer(8), "ocho");
hashtable1.put(new Integer(9), "nueve");
hashtable1.put(new Integer(10), "diez");
java.util.Enumeration enumeration = hashtable1.keys();
pageContext.setAttribute("enumeration", enumeration);
%>
8、map
=
【轟隆隆】推薦: