1.JSTL1.1标簽庫
核心标簽庫,國際化标簽庫,資料庫标簽庫,XML标簽庫,函數标簽庫
2.EL表達式的預設變量
(1)pageScope,requestScope,sessionScope,applicationScope,
這個4個變量包含Scope作用範圍得參數集合,相當于儲存在java.util.Map種得某個參數
(2)預設變量param和paramValues
param表明請求包含的參數為單一控件,paramValues表明請求包含的參數為控件數組
(3)預設變量header和headerValues
包含請求參數頭部資訊得集合,header變量表示單一頭部資訊,headerValue則表示數組型得頭部資訊
(4)預設變量cookie
cookie集合,集合中得每個對象對應javax.servlet.http.Cookie
(5)預設變量initParam包含所有應用程式初始化參數得集合
(6)預設變量pageContext
用來提供通路不同得請求參數
EL表達式操作符
empty:用來對一個空變量進行判斷:null,一個空String,空數組,空map,沒有條目得Collection集合
func:調用方法,func是方法名,args是參數,可以沒有,或者有一個,多個參數,參數間用都好隔開
3.JSTL Core标簽庫
多用途核心标簽:<c:out><c:set><c:remove><c:catch>
條件控制标簽<c:if><c:choose><c:when><c:otherwise>
循環控制标簽<c:forEach><c:forToken>
URL相關标簽<c:import><c:url><c:redirect><c:param>
<c:out>:
<c:out value="{$sessonScope.anyValue}" default="no value" excapeXml="false" />
從Session查找名為anyValue的參數,并顯示在頁面,若咩有找到則顯示no value
xcapeXml當設定為true時會主動更換特殊字元,比如“<>&”,預設為true
<c:set>:
<c:set value="this is andy" var="oneString" />
${oneString}
将名為oneString得變量指派為this is andy,其作用範圍時page
target:被指派的javaBean執行個體名
property,javaBean屬性名
scope:作用範圍,預設為page
<c:remove>:
<c:remove var="sampleValue" scope="session" />
<c:catch>:
<c:catch var="err">
${param.smpleSingleValue[9] == 3}
</c:catch>
${err}
從變量var的err中得到異常内容
<c:if>
<c:if test="{paramValue.sampleValue[2] == 12}" var"visits" />
It is 12
</c:if>
${visits}
将判斷得結果儲存在visits中
<c:choose><c:when><c:otherwise>:
<c:choose>
<c:when test="$paramvalues.sampleValue[2] == 11" />
not 12 not 13,it is 11
</c:when>
<c:when test="$paramvalues.sampleValue[2] == 12" />
not 11 not 13,it is 12
</c:when>
<c:when test="$paramvalues.sampleValue[2] == 13" />
not 11 not 12,it is 13
</c:when>
<c:otherwise>
not 11 12 13
</c:otherwise>
</c:choose>
<c:forEach>:
<c:forEach items="${seesionScope.arrayList}" var"arrayListI" />
${arrayListI}
</c:forEach>
var用來接收集合的對象,該循環的變量名
<c:forTokens>:
<c:forTokens items="aa,bb,cc,dd" begin="0" end="2" step"2" delims="," var="aValue" />
${aValue}
</c:forTokens>
結果時"aa cc",跳兩格,截取逗号前面的字元
delims分隔符,
varStatus顯示循環狀态得變量
<c:import>
<c:import url="/MyHtml.html" var="thisPage" />在同一個Context下導入
<c:import url="/MyHtml.html" context="/sample2" var="thisPage" />在不同Context下導入
<c:import url="www.sample.com/MyHtml.html" var="thisPage" />導入任意一個URL
charEncoding導入頁面的字元集
<c:url>
<c:import url="/MyHtml.html" var="urlPage" />
<a href="${urlPage}" target="_blank" rel="external nofollow" >Link</a>
<c:redirect>:
<c:redirect url="/MyHtml.html" />
一般和<c:if>等标簽一起使用
<c:param>:
<c:redirect url="/MyHtml.html" />
<c:param name="userName" value="RW">
</c:redirect>
傳遞參數
4.JSTL XML processing标簽庫
XML核心标簽庫:<x:parse><x:out><x:set>
XML流控制标簽:<x:if><c:choose><c:when><c:otherwise>
XML轉換标簽<x:transform><x:param>
解析XML檔案的<x:parse>
<c:import var="xmlFile" url="http://localhost:8080/booksamplejstl/SampleXml.xml">
<x:parse var="xmlFileValue" doc="${xmlFile}">
varDom:制定儲存得變量為org.w3c.dom.Document接口類型
scopeDom:org.w3c.dom.Document接口類型的作用範圍
filter:該屬性必須為org.xml.sax.XMLFilter類的一個執行個體,可以使用EL表達式傳入,将對XML檔案做過濾得到自身需要的部分
<x:out>
<x:parse var="xmlFileValue" doc="${xmlFile}" />
name:<x:out select="$xmlFileValue/xml-body/name" /><br>
password:<x:out select="$xmlFileValue/xml-body/password" /><br>
age:<x:out select="$xmlFileValue/xml-body/age" /><br>
加上$作為XPath表達式得開頭,select中的表達式将從xml-body根元素下得各個子元素中取得屍體内容
<x:set>:
<c:set value="this is andy" var="oneString" />
<x:if>
<x:if test="{paramValue.sampleValue[2] == 12}" var"visits" />
It is 12
</x:if>
${visits}
将判斷得結果儲存在visits中
<x:choose><c:when><c:otherwise>:
<x:choose>
<x:when test="$paramvalues.sampleValue[2] == 11" />
not 12 not 13,it is 11
</x:when>
<x:when test="$paramvalues.sampleValue[2] == 12" />
not 11 not 13,it is 12
</x:when>
<x:when test="$paramvalues.sampleValue[2] == 13" />
not 11 not 12,it is 13
</x:when>
<x:otherwise>
not 11 12 13
</x:otherwise>
</x:choose>
<x:forEach>:
<x:forEach items="${seesionScope.arrayList}" var"arrayListI" />
${arrayListI}
</x:forEach>
var用來接收集合的對象,該循環的變量名
格式化XML顯示資料得<x:transform>标簽
<x:transform>标簽允許使用XSLT(轉換XML格式的語言)為頁面得顯示資料做格式化的處理
<c:import var="xmlFile" url="http://localhost:8080/booksamplejstl/SampleXml.xml">
<c:set var="xsltdoc">
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="xml-body">
<html>
<head></head>
<body>
UserName:
<xsl:value-of select="name" />
PassWord:
<xsl:value-of select="password" />
<xsl:value-of select="age" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
</c:set>
<x:transform xslt="${xsltdoc}" doc="${xmlFile}">
将XML檔案儲存的資料資訊利用<c:import>儲存在"xmlFile"中,然後使用<c:set>标簽儲存在一個XSLT得源到"xsltdoc",最後通過<x:tranform>格式化XML檔案得資料顯示在頁面上
<x:param>:
<x:redirect url="/MyHtml.html" />
<x:param name="userName" value="RW">
</x:redirect>
傳遞參數
5.I18N fromattion标簽庫
國際化核心标簽:<fmt:setLocale><fmt:bundle><fmt:setBundle><fmt:message><fmt:param><fmt:requestEncoding>
格式化标簽:<fmt:timeZone><fmt:setTimeZone><fmt:formatNumber><fmt:parseNumber><fmt:formatDate>
<fmt:parseDate>
用于設定本地化環境的<fmt:setLocale>
<fmt:setLocale value="zh_TW">
用于資源檔案綁定的<fmt:bundle><fmt:setBundle>标簽
<fmt:bundle>标簽将資源配置檔案綁定于标簽體中得顯示
<fmt:setBundle>标簽允許将資源配置檔案儲存為一個變量,之後的工作可以根據該變量來進行
<fmt:setBundle basename="applicationMessage" var="applicationBundle" />
該執行個體将會查找一個名為applicationMessage_zh_CN.properties的資源配置檔案,來作為顯示Resource标簽
basename:指定資源配置檔案,隻需要指定檔案名而無須擴充名,是兩組标簽的共有屬性
用于顯示資源配置檔案資訊的<fmt:message>
<fmt:setBundle basename="applicationMessage" var="applicationBundle" />
<fmt:bundle baseanme="applicationAllMessage">
<fmt:message key="userName" />
<p>
<fmt:message key="password" bundle="${applicationBundle}" />
</fmt:bundle>
第一個<fmt:message>标簽将使用"applicationAllMessage"資源配置檔案中”鍵“為"userName"的資訊顯示
第二個<fmt:message>标簽雖然被定義在<fmt:bundle>标簽體内,但是它使用了bundle屬性,是以将指定之前由<fmt:setBundle>标簽儲存的"applicationMessage"資源配置檔案,該”鍵“為"passWord"的資訊顯示
用于參數傳遞得<fmt:param>,隻有value屬性
用于為請求設定字元編碼得<fmt:requestEncoding>标簽,隻有value屬性
用于設定失去得<fmt:timeZone><fmt:setTimeZone>
<fmt:timeZone>使得在其标簽體内得工作可以用該失去設定
<fmt:setTimeZone>将失去設定儲存為一個變量
用于格式化數字得<fmt:formatNumber>
<fmt:formatNumber value="1000.888" type="currency" var="money">
type:格式化類型,由currency(貨币),number(數字),percent(百分比)
pattern:格式化模式
var:結果儲存變量
用于解析數字得<fmt:parseNumber>
<fmt:parseNumber value="15%" type="precent" var="num">
結果是0.15
type:解析格式化的類型
用于格式化日期的<fmt:formatDate>
timeZone:指定格式化日期的時區
和<fmt:timeZone><fmt:setTimeZone>一起用
用于解析日期的<fmt:parseDate>
<fmt:parseDate><fmt:parseNumber>盡量少用,替代工作得地方應該在伺服器端表示層的後段,比如在servlet
6.Database access标簽庫
用于設定資料源得<sql:setDataSource>
現在這個标簽已不用,因為違反了MVC得規範
7.functions标簽
為EL表達式語句提供了許多更有用得功能
長度函數:fn:length
字元串處理函數:fn:contains,fn:containsIgnoreCase,fn:endsWith,fn:escapeXml,fn:indexOf,fn:join,
fn:replace,fn:split,fn:startsWith,fn:substring,fn:substringAfter,fn:substringBefore,fn:toLowerCase,fn:toUpperCase,fn:trim
fn:length
${fn:length(sessionScope.arrayList1)}
參數為input,将計算通過該屬性傳入的對象長度,該對象應該為集合類型或String類型,其傳回結果是一個int類型的值,
判斷函數fn:contains
判斷源字元串是否含有子字元串,傳回結果是boolean類型的值
contains("string","substring"),兩個都是stirng類型
${fn:contains("ABC","a")}傳回false
${fn:contains("ABC","A")}傳回ture
fn:containslgnoreCase函數
和fn:contains差別是fn:containslgnoreCase函數的子字元串忽略大小寫
${fn:ontainslgnoreCase("ABC","a")}傳回ture
${fn:ontainslgnoreCase("ABC","A")}傳回ture
詞頭判斷fn:startsWith
${fn:startsWith("ABC","ab")}傳回false
${fn:startsWith("ABC","AB")}傳回ture
詞尾判斷fn:endsWith
字元實體轉換函數fn:escapeXml
用于将所有特殊字元轉化為字元實體碼,傳回一個string類型
字元比對函數fn:indexOf
${fn:indexOf("ABC","aBC")}傳回-1
${fn:indexOf("ABC","BC")}傳回1
傳回-1或1
分隔符fn:join
<% String[] stringArray = ("a","b","c"); %>
<% request.getSession().setAttribute("stringArray",stringArray); %>
${fn:join(sessionScope.stringArray,",")}
定義數組并防止到Session中,然後通過Session得到該字元串數組,使用fn:join函數并傳入分隔符";",得到的結果為"a;b;c"
替換函數fn:replace
${fn:replace("ABC","A","B")}
"ABC"是原字元串,"A"是被替換的字元,"B"替換後的字元
分隔符轉換數組函數fn:split
${fn:split("A,B,C",",")}
将"A,B,C"字元串轉換為數組{A,B,C}
字元串截取函數fn:substring函數
${fn:substring("ABC","1","2")}
從0開始
截取結果為B
定位到結束截取字元串函數fn:substringAfter函數
${fn:substringAfter("ABC","BC")},結果為D(不包括BC)
允許截取源字元串中某個字元串開始到結束的所有字元
起始到定位截取字元串函數fn:substringBefore
${fn:substringAfter("ABC","BC")}結果為A(不包括BC,BC前的數)
小寫轉換函數fn:toLowerCase
${fn:toLowerCase("ABC")}
大寫轉換函數fn:toUpperCase
${fn:toLowerCase("abc")}
空格删除函數fn:trim函數
${fn:trim("AB C ")}D
轉換結果為"AB CD",隻删除詞尾得空格而不是全部,
8.<bean:define>,<bean:write>被EL表達式替換
<bean:cookie><bean:header><bean:parameter><bean:write>被EL表達式替換
<bean:include>被<c:import>替換
<bean:message>被<fmt:bundle><fmt:setBundle>,<fmt:message>合作替換
所有判斷标簽(logic,bean)被EL表達式和<c:if>替換
<logic:iterate>被<c:forEach>和EL表達替換
<logic:redirect>被<c:redirect>和<c:param>替換