Functions标签库

第18章 JSTL Functions标签库

​ 本书第12章的12.3节(定义和使用EL函数)介绍了EL函数的创建和使用方法。在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()方法的作用相似。

18.1fn: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。

18.2fn: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。

18.3 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。

18.4 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。

18.5 fn:indexOf函数

​ fn:indexOf函数用于在源字符串中查找目标字符串,并返回源字符串中最先与目标字符串匹配的第一个字符的索引,如果在源字符串中不包含目标字符串,就返回-1,源字符串中的第一个字符的索引为0。 fn:indexOf函数的语法为:

​ fn: indexOf (String source,String target) ----int

​ 以上source参数指定源字符串,target参数指定目标字符串,返回类型为int。

​ 例如对于以下EL表达式:

​ 1 ${fn: indexOf (“Tomcat”,”cat”)}

​ 2 ${fn: indexOf (“2211221”,”21”)}

​ 3 ${fn: indexOf (“Tomcat”,”Mike”)}

​ 其输出结果为:

​ 1 3

​ 2 1

​ 3 -1

18.6 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”)}

​ 2 ${ fn: replace(“2008/1/9”,”/”,”-”)}

​ 其输出结果为:

​ 1 Tomcat

​ 2 2008-1-9

18.7 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)}

​ 2 ${ fn: substring (“Tomcat”,3,6)}

​ 其输出结果为:

​ 1 Tom

​ 2 cat

18.8 fn:substringBefore函数

​ fn:substringBefore函数用于获取源字符串中指定子字符串之前的子字符串,其语法为:

​ fn:substringBefore(String source,String target) ----String

​ 以上source参数指定源字符串,target参数指定子字符串,返回类型为String。如果在源字符串中不包含特定子字符串,就返回空字符串。

​ 例如对于以下EL表达式:

​ 1 ${ fn: substringBefore (“Tomcat”,”cat”)}

​ 2 ${ fn: substringBefore (“mydata.txt”,”.txt”)}

​ 其输出结果为:

​ 1 Tom

​ 2 mydata

18.9 fn:substringAfter函数

​ fn: substringAfter函数用于获取源字符串中指定子字符串之后的子字符串,其语法为:

​ fn: substringAfter (String source,String target) ----String

​ 以上source参数指定源字符串,target参数指定子字符串,返回类型为String。如果在源字符串中不包含特定子字符串,就返回空字符串。

​ 例如对于以下EL表达式:

​ 1 ${ fn: substringAfter (“Tomcat”,”Tom”)}

​ 2 ${ fn: substringAfter (“mydata.txt”,” mydata.”)}

​ 其输出结果为:

​ 1 cat

​ 2 txt

18.10 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}

​ </c:forEach>

其输出结果为:

​ www

​ mywebsite

​ org

再例如对于以下代码:

​ <c:set value=’${ fn: split (“www.mywebsite.org”,”-”)}’ var=”strs”/>

${strs[0]}

其输出结果为:

​ www.mywebsite.org

18.11 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

18.12 fn:toLowerCase函数

​ fn:toLowerCase函数用于将源字符串中的所有字符改为小写,其语法为:

​ fn:toLowerCase(String source) -----String

​ 以上source参数指定源字符串,返回类型为String。

​ 例如对于以下EL表达式:

​ fn:toLowerCase(“TomCat”)

​ 其输出结果为:

​ tomcat

18.13 fn:toUpperCase函数

​ fn: toUpperCase函数用于将源字符串中的所有字符改为大写,其语法为:

​ fn: toUpperCase (String source) -----String

​ 以上source参数指定源字符串,返回类型为String。

​ 例如对于以下EL表达式:

​ fn: toUpperCase (“TomCat”)

​ 其输出结果为:

​ TOMCAT

18.14 fn:trim函数

​ fn:trim函数用于将源字符串中的开头和末尾的空格删除,其语法为:

​ fn:trim(String source) ----String

​ 以上source参数指定源字符串,返回类型为String。

​ 例如对于以下EL表达式:

​ fn:trim(“ Tomcat ”)

​ 以上EL表达式的值为“Tomcat”。

18.15 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"%>

out 1.${fn:escapeXml("表示粗体字") }
2.<c:out value="表示粗体字" escapeXml="true"></c:out>
3.${"表示粗体字"}

​ 对于out.jsp中的以下代码:

​ 1.${fn:escapeXml("表示粗体字") }

2.<c:out value="表示粗体字" escapeXml="true"></c:out>

3.${"表示粗体字"}

​ 其输出结果为:

​ 1.<b>表示粗体字</b>

2.<b>表示粗体字</b>

3.表示粗体字

​ out.jsp的输出结果在浏览器中的显示效果如图18-1所示。

![img](file:///C:/Users/156242~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)

图18-1 out.jsp页面

18.16 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"%>

length <% 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)}
集合长度:${fn:length(list)}
字符串长度:${fn:length("Tomcat")}

通过浏览器方位length.jsp,得到的页面如图18-2所示。

![img](file:///C:/Users/156242~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg)

图18-2 length.jsp

18.17 小结

​ 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函数:用于返回字符串中的字符的个数,或者集合和数组的元素的个数

18.18 思考题

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

上一篇:Detours学习之八:DetoursAPI 函数参考


下一篇:找不到kotlin.jvm.functions.Function2的类文件