標籤:redirect glib cto bean val 輸出 out 數組 current
對於JSTL和EL之間的關係,這個問題對於初學JSP的朋友來說,估計是個問題,下面來詳細介紹一下JSTL和EL運算式他們之間的關係,以及JSTL和EL一些相關概念!
EL相關概念
JSTL一般要配合EL運算式一起使用,來實現在jsp中不出現java程式碼片段。所以我們先來學習EL運算式
EL主要用於尋找範圍中的資料,然後對它們執行簡單操作;它不是程式設計語言,甚至不是指令碼編製語言。通常與 JSTL 標記一起作用,能用簡單而又方便的符號來表示複雜的行為。
EL基本格式
EL運算式的格式:用貨幣符號($)定界,內容包括在花括弧({})中;
例如: ${loginInfoBean.suser}
此外,您可以將多個運算式與靜態文本組合在一起以通過字串共置來構造動態屬性值;
例如:Hello {loginInfoBean.suser} ${loginInfoBean.spwd}
EL文法組成-標識符
EL運算式由標識符、存取器、文字和運算子組成。
標識符用來標識儲存在範圍中的資料對象。EL 有 11 個保留標識符,對應於 11個EL隱式對象。除了11隱式對象外,假定所有其它標識符都用來標識範圍的變數。
標識符
例:
${abc} 相當於<%=pageContext.findAttribute(“abc”)%>
${og_1} <%=pageContext.findAttribute(“og_1”)%>
…等等;就是說{}內的標識符除了11個保留字之外都表示範圍中的資料對應的名.
${requestScope}中的requestScope是11個EL隱式對象之一,它不再表示範圍中資料,而是表示request範圍;
EL隱藏對象
pageContext PageContext 執行個體對應於當前頁面的處理
pageScope 與頁面範圍屬性的名稱和值相關聯的Map類
requestScope 與請求範圍屬性的名稱和值相關聯的Map類
sessionScope 與會話範圍屬性的名稱和值相關聯的Map類
applicationScope 與Application 領域屬性的名稱和值相關聯的Map類
param 按名稱儲存請求參數的主要值的 Map 類
paramValues 將請求參數的所有值作為 String 數組儲存的 Map 類
Header 按名稱儲存要求標頭主要值的 Map 類
headerValues 將要求標頭的所有值作為 String 數組儲存的 Map 類
cookie 按名稱儲存請求附帶的 cookie 的 Map 類
initParam 按名稱儲存 Web 應用程式上下文初始化參數的Map類
EL存取器
存取器用來檢索對象的特性或集合的元素。
存取器: 通過 “[]” 或 “.” 符號擷取相關資料
例:
${userBean.suser} 或 ${userBean[“suser”]}
//擷取輸出bean中的suser屬性值;
${mcType[“id”]} //擷取map中key為id對應的值;
EL運算子
運算子允許對資料和文字進行組合以及比較。
EL運算子:
類別 運算子
算術運算子 +、-、*、/(或 div)和 %(或 mod)
關係運算子 ==(或eq)、!=(或ne)、<(或lt)、>(或gt)、<=(或le) 和 >=(或ge)
邏輯運算子 &&(或 and)、||(或or)和 !(或 not)
驗證運算子 empty
驗證運算子(empty):對於驗證資料特別有用。empty 運算子採用單個運算式作為其變數(也即,${empty input}),並返回一個布爾值,該布爾值表示對錶達式求值的結果是不是“空”值。求值結果為 null 的運算式被認為是空,即無元素的集合或數組。如果參數是對長度為零的 String 求值所得的結果,則 empty 運算子也將返回 true。
EL文字
文字表示固定的值 — 數字、字元、字串、布爾型或空值。
在 EL 運算式中,數字、字串、布爾值和 null 都可以被指定為文字值。字串可以用單引號或雙引號定界。布爾值被指定為 true 和 false
JSTL是什麼
JSTL(JSP Standard Tag Library,JSP標準標籤庫)是一個不斷完善的開放原始碼的JSP標籤庫,是由apache的jakarta小組來維護的。JSTL1.0 由四個定製標記庫(core、format、xml 和 sql)和一對通用標記庫驗證器組成。core 標記庫提供了定製操作,通過限制了範圍的變數管理資料,以及執行頁面內容的迭代和條件操作。它還提供了用來產生和操作 URL 的標記。format 標記庫定義了用來格式化資料(尤其是數字和日期)的操作。它還支援使用本地化資源束進行JSP頁面的國際化。xml 庫包含一些標記,這些標記用來操作通過XML表示的資料,而 sql 庫定義了用來查詢關聯式資料庫的操作。 兩個 JSTL 標記庫驗證器允許開發人員在其 JSP 應用程式中強制使用編碼通訊協定。
如果要使用JSTL,則必須引用jstl.jar和 standard.jar兩個包。
為什麼要用JSTL
我們JSP用於開發資訊展現頁非常方便;也可以嵌入java代碼(scriptlet、運算式和聲明)代碼用來實現相關邏輯控制。看下面程式。但這樣做會帶來如下問題:
jsp維護難度增加;
出錯提示不明確,不容易調試;
分工不明確;(即jsp開發人員是美工,也是程式員);
最終增加程式的開發成本;
解決上面的問題可以使用定製標記庫,JSTL使JSP開發人員可以減少對指令碼元素的需求,甚至可以不需要它們,從而避免了相關的維護成本。使分工更明確。
<% if (session.getAttribute(“user”).equals(“member”)) { %><p>Welcome, member!</p><% } else { %><p>Welcome, guest!</p><% } %>
JSTL一般配合EL一起使用,因此先看看EL.
JSTL部署
在EE應用程式中部署JSTL有兩種方式:
已存在的工程上部署
將jstl.jar和standard.jar兩個包考到現有工程
WebRoot / WEB-INF / lib 目錄下
將相關的 .tld檔案考到現有工程 WebRoot / WEB-INF 目錄下;
也可通過eclipse在已存在
工程上部署
建立工程的時候直接部署
在JSP使用JSTL-core標籤庫
core在jsp中的使用:
在 web.xml 中添加
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</jsp-config>
在jsp檔案中添加
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>或<%@ taglib prefix="c" uri="/WEB-INF/c.tld" %>
使用<c:out value=“HelloWorld” />
Core的操作範圍變數標籤
擷取輸出範圍中變數.
<c:out > 屬性: value [default] [escapeXml]
定義範圍中變數
<c:set > 屬性: value var [scope]
刪除範圍中變數
<c:remove > 屬性: var [scope]
Core的條件控制標籤
單分支條件
<c:if > 屬性:test [var] [scope]
多分支條件
<c:choose >
<c:when > 屬性: test
<c:otherwise >
Core的其它標籤
輸出轉換成的URL:
<c:url > 屬性:value [context] [var] [scope]
和<jsp:include >相似用於包含其它頁面的內容:
<c:import >屬性:url [context] [charEncoding] [var] [scope]
重新導向
<c:redirect >屬性: url [context]
與<c:url><c:import><c:redirect>配合使用,用於傳參
<c:param >屬性: name value
Core的迴圈控制標籤
實現簡單迴圈
<c:forEach > var=‘item‘ begin=‘5‘ end=‘10‘ step=‘2‘ varStatus=‘’
實現迭代(遍曆)
<c:forEach > items=‘‘ var=‘item‘ varStatus=‘’
屬性varStatus和var相似設定一個範圍變數;只是varStatus範圍變數中存的是包括運行狀態的對象;此對象包含如下屬性:
current index count first last begin end step
簡單迴圈
<%@ page language="java" contentType="text/html; charset=GBK"%><%@ taglib prefix="c" uri="/WEB-INF/c.tld" %><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>testjstl1</title></head><body><c:forEach var="i" step="1" begin="1" end="100">${i} <br></c:forEach></body></html>
迴圈迭代
<%@ page language="java" contentType="text/html; charset=GBK"%><%@ taglib prefix="c" uri="/WEB-INF/c.tld" %><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>testjstl1</title></head><body><c:forEach var="mcBean" items="${mcList}" varStatus="mcStatus">當前遍曆索引:${mcStatus.index} ; 商品名:${mcBean.sname} ; .... <br></c:forEach></body></html>
在JSP使用JSTL-format標籤庫
format在jsp中的使用:
在 web.xml 中添加
<jsp-config><taglib><taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri><taglib-location>/WEB-INF/fmt.tld</taglib-location></taglib></jsp-config>
在jsp檔案中添加
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
使用
<fmt:formatDate value=“” pattern=“yyyy-MM-dd” />
Format常用標籤
格式化輸出日期:
<fmt:formatDate > value type var pattern
type取值:
short: 10/19/00 6:07 PM
medium: Oct 19, 2000 6:07:01 PM
long: October 19, 2000 6:07:01 PM MDT
full: Thursday, October 19, 2000 6:07:01 PM MDT
例:
<fmt:formatDate value=“” pattern=“yyyy/MM/dd” />
格式化輸出數字:
<fmt:formatNumber> value var pattern
例:
<fmt:formatNumber value=“” pattern=“###.##” />
format執行個體
<%@ page language="java" contentType="text/html; charset=GBK"%><%@ taglib prefix="fmt" uri="/WEB-INF/fmt.tld" %><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>testjstl1</title></head><body><jsp:useBean id="curDate" class="java.util.Date" scope="page"/><fmt:formatDate value="${curDate}" pattern="yyyy-MM-dd HH:mm:ss"/><br><fmt:formatNumber value="10.32898432" pattern="#.##"/><br><% request.setAttribute("var1",3.1415926); %><fmt:formatNumber value="${var1}" pattern="#.##"/><br></body></html>
到這裡我們對JSTL和EL之間的關係有了一定的認識,只要我們經常使用這些技術相信能很快的認識到這些技術的優缺點,比起死記硬背來說,理解才是真正的理解了.
原文地址:http://www.cnblogs.com/IttaHac/p/6206900.html
【轉】JSP中的JSTL與EL運算式用法及區別