全国咨询热线:400-618-4000

JAVA培训之EL函数库

创建时间:2016年09月29日16时42分 来源:传智播客JAVA培训学院

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 浏览器显示结果

本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee