1.什么是EL函数库
EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库是有JSTL提供的,JSTL我们会在后面的课程中详解。EL函数库就是定义了一些有返回值的静态方法,然后通过EL表达式来调用它们,不仅仅JSTL可以定义EL函数库,我们自己也可以自定义EL函数库,这个后面我们也会讲到。
在jsp页面中使用taglib指令导入EL函数库,就可以在页面中使用函数库中的方法。另外,导入的函数库可以使用的前提是,我们的项目中有相关的jar包,我们自己并没有将jar包拷贝的lib目录下,但是当我们的项目发布到服务器下,lib目录中就有了jar包,如图1-1所示:
图1-1 lib目录
2.使用EL函数库
要使用EL函数库,首先要在jsp文件的上面使用taglib指令导入函数库:
- <%@ taglib prefix=”fn” uri=”http://java.sun.com/jsp/jstl/functions”%>
其中,uri的值并不是一个网络路径,只是在定义函数库时,拟定的一个位置。
下面我们来了解EL函数库中的相关方法,具体如下:
- String toUpperCase(String input):把字符串参数转换成大写,并返回;
- String toLowerCase(String input):把字符串参数转换成小写,并返回;
- int indexOf(String input, String substring):返回input中substring出现的索引位置;
- boolean contains(String input, String substring):查看input中是否包含substring,包含返回true,否则返回false;
- boolean containsIgnoreCase(String input, String substring):在忽略大小写的情况下,查看input中是否包含substring,包含返回true,否则返回false;
- boolean startsWith(String input, String substring):判断input是否是以substring为前缀,如果是就返回true,否则就返回false;
- boolean endsWith(String input, String substring):判断input是否是以substring为后缀,如果是就返回true,否则就返回false;
- String substring(String input, int beginIndex, int endIndex):以beginIndex为开始值,endIndex为结束值,在input上截取子串;
- String substringAfter(String input, String substring):获取input中,substring所在位置后面的字符串;
- substringBefore(String input, String substring):获取input中,substring所在位置前面的字符串;
- String escapeXml(String input):把input中“<”、“>“、”&“、”'“、“"”进行转义;
- String trim(String input):去除input中的前后空格;
- String replace(String input, String substringBefore, String substringAfter):将input中的substringBefore替换成substringAfter;
- String[] split(String input, String delimiters):以delimiters为标识分割input,返回一个字符串数组;
- int length(Object obj):可以获取字符串、数组、各种集合的长度!
- String join(String array[], String separator):将array数组中的元素以separator连接起来,返回一个字符串。
通过以上对EL函数库中的方法的讲解,下面通过一个案例来学习这些方法的使用,如下:
(1)创建一个web应用,Example8,在该应的WebRoot目录下新建一个fn目录,然后再该目录下新建一个fn.jsp文件,主要代码如例1-1所示:
例1-1 fn.jsp
<!– 导入函数库 –> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> … … <body> <% String[] strs = {"a", "b","c"};//定义一个字符数组 List list = new ArrayList();//定义一个list集合 list.add("a");//向集合中添加一个字符 pageContext.setAttribute("arr", strs);//将字符数据以arr的名字保存在page域中 pageContext.setAttribute("list", list);//将list集合以list的名字保存在page域中 %> ${fn:length(arr) }<br/><!–返回arr的长度–> ${fn:length(list) }<br/><!–返回list的长度–> ${fn:toLowerCase("Hello") }<br/> <!– 将Hello变成小写 –> ${fn:toUpperCase("Hello") }<br/> <!– 将Hello变成大写 –> ${fn:contains("abc", "a")}<br/><!– 判断abc中是否包含a –> ${fn:containsIgnoreCase("abc", "Ab")}<br/><!– 在忽略大小写的情况下,判断abc中是否包含Ab –> ${fn:contains(arr, "a")}<br/><!– 判断arr数组中是否包含a –> ${fn:containsIgnoreCase(list, "A")}<br/><!– 在忽略大小写的情况下,判断list集合中是否包含A –> ${fn:endsWith("Hello.java", ".java")}<br/><!– 判断Hello.java是否以.java结束 –> ${fn:startsWith("Hello.java", "Hell")}<br/><!– 判断Hello.java是否以Hell开始 –> ${fn:indexOf("Hello-World", "-")}<br/><!– 返回“-”在Hello-World中出现的位置 –> ${fn:join(arr, ";")}<br/><!– 将arr数组中的元素以“-”连接,并返回 –> ${fn:replace("Hello-World", "-", "+")}<br/><!– 将Hello-World中的“-”替换成“+” –> ${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!–最终是将数组的元素以“-”连接,并返回 –> ${fn:substring("0123456789", 6, 9)}<br/><!– 返回0123456789中索引值为6到索引值为9之间的元素 –> ${fn:substring("0123456789", 5, -1)}<br/><!– 返回0123456789中索引值为6到结束的元素 –> ${fn:substringAfter("Hello-World", "-")}<br/><!– 返回Hello-World中“-”后面的字符串 –> ${fn:substringBefore("Hello-World", "-")}<br/><!– 返回Hello-World中“-”前面的字符串 –> ${fn:trim(" a b c ")}<br/><!– 去掉 a b c 前后的空格 –> ${fn:escapeXml("<html></html>")}<br/> <!– 将“<html></html>”中的“<”,“>”转义,即原样输出 –> </body> |
(2)将Example8发布到服务器,然后启动服务器,在浏览器端访问fn.jsp,浏览器显示结果如图1-2所示:
图1-2 浏览器显示结果
例1-1中,在使用函数库中的方法之前,分别定义了一个字符串数组str和一个list集合,然后将这两个变量存放在page域中,这样做的原因是,函数库中的这些方法的参数如果是变量,那么必须将变量放在域中,否则EL表达式就获取不到这些变量,例如将例1-1中的存放数据到域中的代码注释掉,再次方法fn.jsp,浏览器运行结果如图1-3所示:
图1-3 浏览器显示结果
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/253217.html