JSP標簽和JSTL
Java的5個標簽庫:核心(c)、格式化(fmt)、函數(fn)、SQL(sql)、XML(x)
SQL、XML庫不推薦使用
核心標簽庫(c)
//taglib指令
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out>
//<c:out>標簽用於在JSP中輸出內容 //有value、default、escapeXml三個屬性 //escapeXml用於對保留xml字符(<、>、‘、"、、&)轉義,設為false禁止轉義 <c:out value="${someValue}" default="${defaultValue}"/> //default可以寫在標簽內,用於設置默認值 <c:out value="${someValue}">${defaultValue}</c:out>
<c:if>
//<c:if>用於控制是否渲染標簽內的內容 //有test、var、scope三個屬性 //test值為假,標簽中的所有內容都會被忽略 <c:if test="false"> 這的內容都會被忽略 </c:if>
<c:choose>、<c:when>、<c:otherwise>
//<c:choose>不包含屬性,只作為<c:when>、<c:otherwise>的父標簽 //<c:choose>中至少包含一個<c:when>,至多包含一個<c:otherwise>,並且只能是最後一個標簽 <c:choose> //<c:when>只包含一個test屬性 <c:when test="someCondition">if</c:when> <c:when test="someCondition">else if</c:when> <c:otherwise>else</c:otherwise> </c:choose>
<c:forEach>、<c:forTokens>
//<c:forEach>類似於java中的for循環 //有items、begin、end、step、var、varStatus六個屬性 //java中的for循環 for(int i=0;i<100;i++) out.printfln(i); //用<c:forEach>表示 //step默認值是1,可以不寫 <c:forEach var="i" begain="0" end="100" step="1">i</c:forEach> //items表示要遍歷的集合、數組、Map、Iterator、Enumeration //varStatus表示集合裏的變量 <c:forEach items="lists" varStatus="student"> ${student.name} ${student.number} </c:forEach> //<c:forTokens>的items是字符串 //<c:forTokens>標簽與<c:forEach>標簽有相似的屬性,只多一個delims屬性,delims是分隔符 <c:forTokens items="google,runoob,taobao" delims="," var="name"><c:out value="${name}"/></c:forTokens>
<c:url>
//<c:url>標簽可以正確的對url編碼,常配合<c:param>使用 //有value、context、var、scope四個屬性 //context用於指定根路徑 //路徑是/index.jsp <c:url value="/index.jsp" context="/"/> //路徑是/store/item.jsp <c:url value="/item.jsp" context="/store"/> //var指定了用於創建和保存URL結果的EL變量,默認作用域是page,通過scope屬性更改作用域 <a href="<c:url value="/index.jsp" var="homeUrl" scope="request"/>">測試url</a>
<c:redirect>
//<c:redirect>標簽通過自動重寫URL來將瀏覽器重定向至一個新的URL,丟失<c:redirect>之後所有內容,可以和<c:param>一起使用 //有url、context兩個屬性 <c:redirect url="http://www.baidu.com"/>
<c:import>
//可以獲取特定url資源的內容,這些內容可以保存在響應、字符串變量、Reader變量中,可以和<c:param>配合使用,用於指定url中的查詢參數 //有url、content、charEncoding、var、scope、varReader六個屬性 //url可以使相對路徑、絕對路徑 //charEncoding,當資源未返回Content-Type時使用 //scope指定var的作用域 //varReader中的Reader變量只能在<c:import>標簽內,不可以和var、<c:param>一起使用 //以下代碼打印百度源碼 <c:import var="data" url="http://www.baidu.com"/> <c:out value="${data}"/>
<c:param>
//<c:param>標簽用於設定跟url有關參數 //有name、value兩個屬性 <c:url var="myURL" value="main.jsp"> <c:param name="name" value="abc"/> <c:param name="url" value="www.baidu.com"/> </c:url> <a href="/<c:out value="${myURL}"/>"> //輸出:/main.jsp?name=abc&url=www.baidu.com
<c:set>、<c:remove>
//<c:set>標簽用於設置變量值和對象屬性 //有value、target、property、var、scope五個屬性 //修改對象的值 <c:set target="${someObject}" property="someProperty" value="hello"/> //給某個變量賦值 <c:set var="salary" scope="session" value="${2000*2}"/> //<c:remove>標簽用於移除一個變量,如果未指定作用域,所有名稱匹配的都會被移除 //有var、scope兩個屬性 <c:remove var="salary"/>
格式化標簽庫(fmt)
國際化和本地化組件
國際化和本地化由3個部分組成
1.文本之間不同語言的轉換
2.日期、時間、貨幣、百分比的格式化
3.外國貨幣和本地貨幣的轉換(通常可忽略)
在JSTL中提供了i18n標簽用於處理文本之間不同語言的轉換,提供了格式化標簽處理日期、時間、貨幣、百分比的格式化
//taglib指令 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
i18n標簽
<fmt:bundle>、<fmt:setBundle>
i18n標簽通過<fmt:setLocale>、<fmt:setBundle>指定資源包
搜索資源的先後順序
1.<fmt:message>中的bundle屬性指定的資源包
2.內嵌在<fmt:bundle>中的資源包
3.默認的本地化資源包
//定義english資源包 public class Example_En extends ListResourceBundle { public Object[][] getContents() { return contents; } static final Object[][] contents = { {"count.one", "One"}, {"count.two", "Two"}, {"count.three", "Three"}, }; } //定義Spanish資源包 public class Example_es_ES extends ListResourceBundle { public Object[][] getContents() { return contents; } static final Object[][] contents = { {"count.one", "Uno"}, {"count.two", "Dos"}, {"count.three", "Tres"}, }; } //<fmt:setBundle>用於加載指定的資源包 //屬性:basename、var、scope <fmt:bundle basename="com.test.Example_En"> <fmt:message key="count.one"/><br/> <fmt:message key="count.two"/><br/> <fmt:message key="count.three"/><br/> </fmt:bundle> //修改地區 <fmt:setLocale value="es_ES"/> <fmt:bundle basename="com.test.Example_es_ES"> <fmt:message key="count.one"/><br/> <fmt:message key="count.two"/><br/> <fmt:message key="count.three"/><br/> </fmt:bundle>
<fmt:message>
//<fmt:message>標簽用於將bundle裏的key替換成對應的value //屬性:key、bundle、var、scope <fmt:setLocale value="en"/> <fmt:setBundle basename="com.test.Example" var="lang"/> <fmt:message key="count.one" bundle="${lang}"/><br/> <fmt:message key="count.two" bundle="${lang}"/><br/> <fmt:message key="count.three" bundle="${lang}"/><br/>
<fmt:setLocale>
//<fmt:setLocale>標簽用來將給定的區域存儲在locale配置變量中,正常情況不需要使用,國際化應用程序會在請求被轉發到JSP 中時自動進行區域設置 //屬性:value、variant、scope <fmt:setLocale value="es_ES"/>
<fmt:requestEncoding>
<fmt:requestEncoding>標簽用來指定返回給Web應用程序的表單編碼類型
由於Servlet在<fmt:requestEncoding>之前處理請求, Servlet能修改字符編碼;現代瀏覽器會設定字符編碼內容類型請求和響應,故現在已經不需要這個標簽
格式化標簽
<fmt:timeZone>、<fmt:setTimeZone>
格式化標簽優先級
1.格式化標簽中的timeZone屬性
2.<fmt:timeZone>標簽內
3.初始化參數中的
4.JVM的時區
//<fmt:setTimeZone>標簽用來復制一個時區對象至指定的作用域 //屬性:value、var、scope <fmt:setTimeZone value="America/Chicago" var="zone"/> //<fmt:timeZone>標簽用來指定時區,供其它標簽使用 //屬性:value <fmt:timeZone value="${zone}"></fmt:timeZone>
<fmt:formatDate>、<fmt:parseDate>
//<fmt:formatDate>標簽用於使用不同的方式格式化日期 //屬性:value、type、dateStyle、timeStyle、pattern、timeZone、var、scope //<fmt:formatDate>的value值必須是java.util.Data實例或者EL表達式,不支持java.util.Calendar、及java 8 Date //type只能是DATE, TIME, 或 BOTH,分別表示只輸出日期、只輸出時間、輸出日期和時間 //dateStyle、timeStyle只能是FULL, LONG, MEDIUM, SHORT, 或 DEFAULT //pattern用於自定義格式模式,不推薦 <c:set var="now" value="<%=new java.util.Date()%>" /> <p>日期格式化 (1): <fmt:formatDate type="time" value="${now}" /></p> <p>日期格式化 (2): <fmt:formatDate type="date" value="${now}" /></p> <p>日期格式化 (3): <fmt:formatDate type="both" value="${now}" /></p> <p>日期格式化 (4): <fmt:formatDate type="both" dateStyle="short" timeStyle="short" value="${now}" /></p> <p>日期格式化 (5): <fmt:formatDate type="both" dateStyle="medium" timeStyle="medium" value="${now}" /></p> <p>日期格式化 (6): <fmt:formatDate type="both" dateStyle="long" timeStyle="long" value="${now}" /></p> <p>日期格式化 (7): <fmt:formatDate pattern="yyyy-MM-dd" value="${now}" /></p> /*輸出 日期格式化: 日期格式化 (1): 11:19:43 日期格式化 (2): 2018-4-29 日期格式化 (3): 2018-4-29 11:19:43 日期格式化 (4): 18-4-29 上午11:19 日期格式化 (5): 2018-4-29 11:19:43 日期格式化 (6): 2018年4月29日 上午11時19分43秒 日期格式化 (7): 2019-4-29 */
//<fmt:parseDate>用於解析日期 //屬性與<fmt:formatDate>相同 <c:set var="now" value="20-10-2015" /> <fmt:parseDate value="${now}" var="parsedEmpDate" pattern="dd-MM-yyyy" /> <p>解析後的日期為: <c:out value="${parsedEmpDate}" /></p>
<fmt:formatNumber>、<fmt:parseNumber>
//<fmt:formatNumber>標簽用於格式化數字,百分比,貨幣 //屬性:value、type、pattern、currencyCode、currencySymbol、groupingUsed、maxIntegerDigits、
minIntegerDigits、maxFractionDigits、minFractionDigits、var、scope //value表示要顯示的數字 //type只能是NUMBER,CURRENCY,或 PERCENT類型 //currencyCode、currencySymbol貨幣碼、貨幣符號 <c:set var="balance" value="120000.2309" /> <p>格式化數字 (1): <fmt:formatNumber value="${balance}" type="currency"/></p> <p>格式化數字 (2): <fmt:formatNumber type="number" maxIntegerDigits="3" value="${balance}" /></p> <p>格式化數字 (3): <fmt:formatNumber type="number" maxFractionDigits="3" value="${balance}" /></p> <p>格式化數字 (4): <fmt:formatNumber type="number" groupingUsed="false" value="${balance}" /></p> <p>格式化數字 (5): <fmt:formatNumber type="percent" maxIntegerDigits="3" value="${balance}" /></p> <p>格式化數字 (6): <fmt:formatNumber type="percent" minFractionDigits="10" value="${balance}" /></p> <p>格式化數字 (7): <fmt:formatNumber type="percent" maxIntegerDigits="3" value="${balance}" /></p> <p>格式化數字 (8): <fmt:formatNumber type="number" pattern="###.###E0" value="${balance}" /></p> /* 數字格式化: 格式化數字 (1): ¥120,000.23 格式化數字 (2): 000.231 格式化數字 (3): 120,000.231 格式化數字 (4): 120000.231 格式化數字 (5): 023% 格式化數字 (6): 12,000,023.0900000000% 格式化數字 (7): 023% 格式化數字 (8): 120E3 */ //<fmt:parseNumber>標簽用來解析數字,百分數,貨幣 <c:set var="balance" value="1250003.350" /> <fmt:parseNumber var="i" type="number" value="${balance}" /> <p>數字解析 (1) : <c:out value="${i}" /></p> <fmt:parseNumber var="i" integerOnly="true" type="number" value="${balance}" /> <p>數字解析 (2) : <c:out value="${i}" /></p>
函數庫(fn)
函數 | 描述 |
---|---|
fn:contains() | 測試輸入的字符串是否包含指定的子串 |
fn:containsIgnoreCase() | 測試輸入的字符串是否包含指定的子串,大小寫不敏感 |
fn:endsWith() | 測試輸入的字符串是否以指定的後綴結尾 |
fn:escapeXml() | 跳過可以作為XML標記的字符 |
fn:indexOf() | 返回指定字符串在輸入字符串中出現的位置 |
fn:join() | 將數組中的元素合成一個字符串然後輸出 |
fn:length() | 返回字符串長度 |
fn:replace() | 將輸入字符串中指定的位置替換為指定的字符串然後返回 |
fn:split() | 將字符串用指定的分隔符分隔然後組成一個子字符串數組並返回 |
fn:startsWith() | 測試輸入字符串是否以指定的前綴開始 |
fn:substring() | 返回字符串的子集 |
fn:substringAfter() | 返回字符串在指定子串之後的子集 |
fn:substringBefore() | 返回字符串在指定子串之前的子集 |
fn:toLowerCase() | 將字符串中的字符轉為小寫 |
fn:toUpperCase() | 將字符串中的字符轉為大寫 |
fn:trim() | 移除首位的空白符 |
JSP標簽和JSTL