在JSTL Functions標籤庫中提供了一組常用的EL函數,主要用於處理字符串,在JSP中可以直接使用這些函數。
在JSP文件中使用Functions標籤庫,要先通過taglib指令引入該標籤庫:
<%@taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix="fn" %>.
本章將介紹Functions標籤庫中常用的16個函數的用法,這些函數的名字及作用與java.lang.String類中的相應方法很相似。例如:fn:indexOf函數與類String類的indexOf()方法的作用相似,fn:substring函數與String類的substring()方法的作用相似。
fn:contains函數
fn:contains函數用於判斷在源字符串中是否包含目標字符串,其語法爲:
fn:contains(String source,String target) -------boolean;
以上source參數指定源字符串,target參數指定目標字符串,返回類型爲boolean。
例如對於以下EL表達式:
${fn:contains(“Tomcat”,”cat”)}
${fn:contains(“Tomcat”,”CAT”)}
第一個EL表達式的值爲true,第二個EL表達式的值爲false。
fn:containsIgnoreCase函數
fn:containsIgnoreCase函數用於判斷在源字符串中是否包含目標字符串,並且在判斷時忽略大小寫,其語法爲:
fn: containsIgnoreCase (String source,String target) -------boolean;
以上source參數指定源字符串,target參數指定目標字符串,返回類型爲boolean。
例如對於以下EL表達式:
${fn: containsIgnoreCase (“Tomcat”,”CAT”)}
${fn: containsIgnoreCase (“Tomcat”,”Mike”)}
第一個EL表達式的值爲true,第二個EL表達式的值爲false。
fn:startsWith函數
fn:startsWith函數用於判斷源字符串是否以指定的目標字符串開頭,其語法爲:
fn:startsWith(String source,String target) ----boolean
以上source參數指定源字符串,target參數指定目標字符串,返回類型爲boolean。
例如對於以下EL表達式:
${fn: startsWith (“Tomcat”,”Tom”)}
${fn: startsWith (“Tomcat”,”cat”)}
第一個EL表達式的值爲true,第二個EL表達式的值爲false。
fn:endsWith函數
fn: endsWith函數用於判斷源字符串是否以指定的目標字符串結尾,其語法爲:
fn: endsWith (String source,String target) ----boolean
以上source參數指定源字符串,target參數指定目標字符串,返回類型爲boolean。
例如對於以下EL表達式:
${fn: endsWith (“Tomcat”,”cat”)}
${fn: endsWith (“Tomcat”,”Tom”)}
第一個EL表達式的值爲true,第二個EL表達式的值爲false。
fn:indexOf函數
fn:indexOf函數用於在源字符串中查找目標字符串,並返回源字符串中最先與目標字符串匹配的第一個字符的索引,如果在源字符串中不包含目標字符串,就返回-1,源字符串中的第一個字符的索引爲0。 fn:indexOf函數的語法爲:
fn: indexOf (String source,String target) ----int
以上source參數指定源字符串,target參數指定目標字符串,返回類型爲int。
例如對於以下EL表達式:
${fn: indexOf (“Tomcat”,”cat”)}<br/>
${fn: indexOf (“2211221”,”21”)} <br/>
${fn: indexOf (“Tomcat”,”Mike”)} <br/>
其輸出結果爲:
1 3
2 1
3 -1
fn:replace函數
fn:replace函數用於把源字符串中的一部分替換爲另外的字符串,並返回替換後的字符串。fn:replace函數的語法爲:
fn: replace (String source,String before,String after) ----String
以上source參數指定源字符串,before參數指定源字符串中被替換的子字符串,after參數指定用於替換的子字符串,返回類型爲String。
例如對於以下EL表達式:
1 ${ fn: replace(“TomcAt”,”cAt”,”cat”)}<br/>
2 ${ fn: replace(“2008/1/9”,”/”,”-”)}<br/>
其輸出結果爲:
1 Tomcat
2 2008-1-9
fn:substring函數
fn:substring函數用於獲取源字符串中的特定子字符串,它的語法爲:
fn:substring(String source,int beginIndex,int endIndex) ------String
以上source參數指定源字符串,beginIndex參數表示子字符串中的第一個字符在源字符串中的索引,endIndex參數表示子字符串的最後一個字符在源字符串中的索引加1,返回類型爲String,源字符串中的第一個字符的索引爲0。
例如對於以下EL表達式:
1 ${ fn: substring (“Tomcat”,0,3)}<br/>
2 ${ fn: substring (“Tomcat”,3,6)}<br/>
其輸出結果爲:
1 Tom
2 cat
fn:substringBefore函數
fn:substringBefore函數用於獲取源字符串中指定子字符串之前的子字符串,其語法爲:
fn:substringBefore(String source,String target) ----String
以上source參數指定源字符串,target參數指定子字符串,返回類型爲String。如果在源字符串中不包含特定子字符串,就返回空字符串。
例如對於以下EL表達式:
1 ${ fn: substringBefore (“Tomcat”,”cat”)}<br/>
2 ${ fn: substringBefore (“mydata.txt”,”.txt”)}<br/>
其輸出結果爲:
1 Tom
2 mydata
fn:substringAfter函數
fn: substringAfter函數用於獲取源字符串中指定子字符串之後的子字符串,其語法爲:
fn: substringAfter (String source,String target) ----String
以上source參數指定源字符串,target參數指定子字符串,返回類型爲String。如果在源字符串中不包含特定子字符串,就返回空字符串。
例如對於以下EL表達式:
1 ${ fn: substringAfter (“Tomcat”,”Tom”)}<br/>
2 ${ fn: substringAfter (“mydata.txt”,” mydata.”)}<br/>
其輸出結果爲:
1 cat
2 txt
fn:split函數
fn:split函數用於將源字符串拆分爲一個字符串數組,其語法爲:
fn: split (String source,String delimiter) ----String[]
以上source參數指定源字符串,delimiter參數指定用於拆分源字符串的分隔符,返回類型爲String[]。如果在源字符串中不包含delimiter參數指定的分隔符,或者delimiter參數爲null,那麼在返回的字符串數組中只有一個元素,爲源字符串。
例如對於以下EL表達式:
<c:set value=’${ fn: split (“www.mywebsite.org”,”.”)}’ var=”strs”/>
<c:forEach var=”token” item=”${strs}”>
${token}<br/>
</c:forEach>
其輸出結果爲:
www
mywebsite
org
再例如對於以下代碼:
<c:set value=’${ fn: split (“www.mywebsite.org”,”-”)}’ var=”strs”/>
${strs[0]}
其輸出結果爲:
www.mywebsite.org
fn:join函數
fn:join函數用於將源字符串數組中的所有字符串連接爲一個字符串,其語法爲:
fn:join(String source[],String separator) ----String
以上source參數指定源字符串數組,separator參數指定用於連接源字符串數組中的各個字符串的分隔符,返回類型爲String。
例如對於以下代碼:
<%
String strs[] = {“www”,”mywebsite”,”org”};
%>
<c:set value=”<%=strs%>” var=”strs”/>
${fn:join(strs,”.”)}
其輸出結果爲:
www. mywebsite. org
fn:toLowerCase函數
fn:toLowerCase函數用於將源字符串中的所有字符改爲小寫,其語法爲:
fn:toLowerCase(String source) -----String
以上source參數指定源字符串,返回類型爲String。
例如對於以下EL表達式:
fn:toLowerCase(“TomCat”)
其輸出結果爲:
tomcat
fn:toUpperCase函數
fn: toUpperCase函數用於將源字符串中的所有字符改爲大寫,其語法爲:
fn: toUpperCase (String source) -----String
以上source參數指定源字符串,返回類型爲String。
例如對於以下EL表達式:
fn: toUpperCase (“TomCat”)
其輸出結果爲:
TOMCAT
fn:trim函數
fn:trim函數用於將源字符串中的開頭和末尾的空格刪除,其語法爲:
fn:trim(String source) ----String
以上source參數指定源字符串,返回類型爲String。
例如對於以下EL表達式:
fn:trim(“ Tomcat ”)
以上EL表達式的值爲“Tomcat”。
fn:escapeXml函數
fn:escapeXml函數用於將源字符串中的字符“<”、“>”、“””和“&”等轉換爲轉義字符,本書第1章的1.2節(HTML簡介)介紹了轉義字符的概念。fn:escapeXml函數的行爲與<c:out>標籤的escapeXml屬性爲true時的轉換行爲相同,fn:escapeXml函數的語法爲:
fn:escapeXml(String source) ----String
以上source參數指定源字符串,返回類型爲String。
例程18-1的out.jsp演示了fn:escapeXml函數的用法。
例程18-1 out.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>out</title> </head> <body> 1.${fn:escapeXml("<b>表示粗體字</b>") }<br/> 2.<c:out value="<b>表示粗體字</b>" escapeXml="true"></c:out><br/> 3.${"<b>表示粗體字</b>"}<br/> </body> </html> |
對於out.jsp中的以下代碼:
1.${fn:escapeXml("<b>表示粗體字</b>") }<br/>
2.<c:out value="<b>表示粗體字</b>" escapeXml="true"></c:out><br/>
3.${"<b>表示粗體字</b>"}<br/>
其輸出結果爲:
1.<b>表示粗體字</b><br/>
2.<b>表示粗體字</b><br/>
3.<b>表示粗體字</b><br/>
out.jsp的輸出結果在瀏覽器中的顯示效果如圖18-1所示。
圖18-1 out.jsp頁面
fn:length函數
fn:length函數用於返回字符串中的字符的個數,或者集合和數組的元素的個數,其語法爲:
fn:length(source) ---- int
以上source參數可以爲字符串、集合或者數組,返回類型爲int。
例程18-2的length.jsp演示了fn:length函數的用法。
例程18-2 length.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> <%@page import="java.util.ArrayList"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>length</title> </head> <body> <% int[] array = {1,2,3,4}; ArrayList list = new ArrayList(); list.add("one"); list.add("two"); list.add("three"); %> <c:set value="<%=array%>" var="array"></c:set> <c:set value="<%=list%>" var="list"></c:set> 數組長度:${fn:length(array)}<br/> 集合長度:${fn:length(list)}<br/> 字符串長度:${fn:length("Tomcat")}<br/> </body> </html> |
通過瀏覽器方位length.jsp,得到的頁面如圖18-2所示。
圖18-2 length.jsp
小結
Functions標籤庫提供了一些通用的EL函數,包括以下幾種。
l fn:contains函數:用於判斷在源字符串中是否包含目標字符串。
l fn:containsIgnoreCase函數:用於判斷在源字符串中是否包含目標字符串,並且在判斷時忽略大小寫。
l fn:startsWith函數:用於判斷源字符串是否以指定的目標字符串開頭。
l fn: endsWith函數:用於判斷源字符串是否以指定的目標字符串結尾。
l fn:indexOf函數:用於在源字符串中查找目標字符串,並返回源字符串中最先與目標字符串匹配的第一個字符的索引。
l fn:replace函數:用於把源字符串中的一部分替換爲另外的字符串,並返回替換後的字符串。
l fn:substring函數:用於獲取源字符串中的特定子字符串。
l fn:substringBefore函數:用於獲取源字符串中指定子字符串之前的子字符串。
l fn: substringAfter函數:用於獲取源字符串中指定子字符串之後的子字符串
l fn:split函數:用於將源字符串拆分爲一個字符串數組。
l fn:join函數:用於將源字符串數組中的所有字符串連接爲一個字符串。
l fn:toLowerCase函數:用於將源字符串中的所有字符改爲小寫。
l fn: toUpperCase函數:用於將源字符串中的所有字符改爲大寫。
l fn:trim函數:用於將源字符串中的開頭和末尾的空格刪除。
l fn:escapeXml函數:用於將源字符串中的字符“<”、“>”、“””和“&”等轉換爲轉義字符。
l fn:length函數:用於返回字符串中的字符的個數,或者集合和數組的元素的個數
思考題
1、以下哪些屬於Functions標籤庫中的函數?(多選)
a、fn:contains b、fn:connect c、fn:length d、fn:split
2、以下哪個函數用於獲取源字符串中的特定子字符串?(單選)
a、fn:contains b、fn:indexOf c、fn:substring d、fn:trim
3、以下哪些EL表達式的值爲true?(多選)
a、${fn:contains(“Tomcat”,”CAT”)}
b、${fn:contains(“Tomcat”,”cat”)}
c、${fn:containsIgnoreCase(“Tomcat”,”CAT”)}
d、${fn:startsWith(“Tomcat”,”T”)}
4、以下哪些EL表達式的值爲cat?(多選)
a、${fn:replace(“cAt”,”A”,”a”)}
b、${fn:substring(“Tomcat”,”3”,”6”)}
c、${fn:substringAfter(“Tomcat”,”Tom”)}
d、${fn:indexOf(“Tomcat”,”cat”)}
5、運行以下這段代碼會出現什麼情況?(單選)
<%
String strs[] = {“www”,”mywebsite”,”org”};
%>
${fn:join(strs,”.”)}
a、輸出“www. mywebsite.org”
b、輸出“wwwmywebsiteorg”
c、沒有任何輸出結果
d、拋出異常,命名變量strs不存在
6、以下哪些函數的返回類型爲int?(多選)
a、fn:join b、fn:indexOf c、fn:length d、fn:trim
答案:
1.acd 2.c 3.bcd 4.abc 5.c 6.bc