一、EL (Expression Language)
作用:获取数据、执行运算、获取 Web 开发常用对象。
1、获取数据:EL 表达式主要用于替换掉 Jsp 页面中的脚本表达式<%%><%!%><%=%>,以从各种类型的 Web 域中检索 Java 对象、获取数据
类型 |
实例 |
基本调用方法 |
JavaBeans |
${user.username} ${user["username"]} ${user['username']} |
user.getUsername() |
数组 |
${sport[1]} ${sport["1"]} ${sport['1']} |
sport[1] |
List |
${phone[2]} ${phone["2"]} ${phone['2']} |
phone.get(2) |
Map |
${phone.home} ${phone["home"]} ${phone['home']} |
phone.get("home") |
(1) 获取域里面的数据:${data},取出域里面关键字为 data 的数据
服务器会将 ${data} 等同于:pageContext.findAttribuate("data");
找不到不会返回 null,而是返回 ""
(2) 获取 JavaBean 中的数据:${bean.property}
(3) 获取 JavaBean 中维护的其它的 JavaBean中的数据:${bean1.bean2.property}
(4) 获取集合中的数据:${list[1].property},如果 "." 搞不出数据的话就换成[]
(5) 获取 Map 中的数据:${map.key.property},有可能取不出,比如 key 为数字,那么就加 '',${map['key'].property}
2、执行运算:利用 EL 表达式可以在 Jsp 页面中执行一些基本的关系运算、逻辑运算和算数运算。
类型 |
定义 |
算术型 |
+ - * / div % mod |
逻辑型 |
and && or || not ! |
关系型 |
== eq != ne > gt < lt >= ge <= le |
条件型 |
a?b:c |
空 |
empty |
(1) ${user==null}
${username=='aaa' && password='bbb'}
${1+1}
(2) empty 运算符:检查集合是否为 null 或 "空"
(3) 二元运算符:${gender=='male'?checked:''}
3、获取 Web 开发常用对象:EL 表达式定义了 11 个隐式对象
语法:${对象名称}
(1)、${pageContext} 获取到 pageContext 对象,它不是在四个域里面去找,而是先在自己定义的对象中找,如果找到了就取出来。
${pageContext.request.contextPath} 获取针对当前工程的相对路径,应用于 URL 上,因为我们不应该将 URL 写死在代码中。
(2)、${pageScope} 得到的是 page 域 (pageContext) 中保存数据的 Map集合。也就是指定在 page 域中查找。
(3)、${requestScope}、${sessionScope}、${applicationScope} 和上面的 pageScope 一样,都是在特定的域中检索数据。
(4)、${param} 获取存在 request 中请求参数的 Map,常用在数据回显上。
(5)、${paramValues} 获取存在 request 中请求参数名相同的值的 String[] 数组。
(8)、${header} 获取 HTTP 请求头的 Map 对象。
(9)、${headValues} 获取 HTTP 请求头值的 Map 对象
(10)、${cookie} 获取所有 cookie 的 Map 对象
(11)、${initParam} 获取保存所有 Web 应用初始化参数的 Map 对象
二、EL 函数库
在页面显示的时候我们常常对字符串进行处理,SUN 公司提供了一个 EL 函数库方便我们的操作。
1、fn:toLowerCase(将大写转成小写)
2、fn:toUpperCase(将小写转成大写)
3、fn:trim (删除字符串的首尾空格)
4、fn:length (返回集合、数组的大小,或返回字符串的字符个数)
5、fn:split 以指定字符串分割字符串
6、fn:join 以字符串为分隔符将一个字符串数组以分隔符的形式连接起来,如果第二个参数为空字符串,那么是将字符串整个连起来。
7、fn:indexof 返回指定字符串在一个字符串中首次出现的位置。如果没有包含则返回 -1,如果第二个参数为空字符串那么返回 0
8、fn:contains(包含)
9、fn:replace (替换)
10、fn:sunstring (与 java 不同,截取字符串不是按长度来截取,是按从开始到结束的索引号来截取)
11、fn:substringAfter (截取并返回一个字符串中的指定字符串第一次出现之后的字符串)
9、fn:containsIgnoreCase
10、fn:startsWith 检测一个字符串是否以指定字符串开始
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@page import="com.hlx.User"%> 3 <%--引入EL函数库 --%> 4 <%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 5 <!DOCTYPE HTML> 6 <html> 7 <head> 8 <title>EL函数库中的方法使用范例</title> 9 </head> 10 11 <body> 12 <h3>fn:toLowerCase函数使用范例:</h3> 13 <%--fn:toLowerCase函数将一个字符串中包含的所有字符转换为小写形式,并返回转换后的字符串, 14 它接收一个字符串类型的参数。fn:toLowerCase("")的返回值为空字符串--%> 15 <%--fn:toLowerCase("Www.CNBLOGS.COM") 的返回值为字符串“www.cnblogs.com” --%> 16 fn:toLowerCase("Www.CNBLOGS.COM")的结果是:${fn:toLowerCase("Www.CNBLOGS.COM")} 17 <hr/> 18 <h3>fn:toUpperCase函数使用范例:</h3> 19 <%--fn:toUpperCase函数将一个字符串中包含的所有字符转换为大写形式,并返回转换后的字符串, 20 它接收一个字符串类型的参数。fn:toUpperCase("")的返回值为空字符串--%> 21 fn:toUpperCase("cnblogs.com")的结果是:${fn:toUpperCase("cnblogs.com")} 22 <hr/> 23 <h3>fn:trim函数使用范例:</h3> 24 <%--fn:trim函数删除一个字符串的首尾的空格,并返回删除空格后的结果字符串, 25 它接收一个字符串类型的参数。需要注意的是,fn:trim函数不能删除字符串中间位置的空格。--%> 26 fn:trim(" cnblogs.com ")的结果是:${fn:trim(" cnblogs.com ")} 27 <hr/> 28 <h3>fn:length函数使用范例:</h3> 29 <%--fn:length函数返回一个集合或数组大小,或返回一个字符串中包含的字符的个数,返回值为int类型。 30 fn:length函数接收一个参数,这个参数可以是<c:forEach>标签的items属性支持的任何类型, 31 包括任意类型的数组、java.util.Collection、java.util.Iterator、java.util.Enumeration、 32 java.util.Map等类的实例对象和字符串。 33 如果fn:length函数的参数为null或者是元素个数为0的集合或数组对象,则函数返回0;如果参数是空字符串,则函数返回0 34 --%> 35 <% 36 List<String> list = Arrays.asList("1","2","3"); 37 request.setAttribute("list",list); 38 %> 39 fn:length(list)计算集合list的size的值是:${fn:length(list)} 40 <br/> 41 fn:length("cnblogs.com")计算字符串的长度是:${fn:length("cnblogs.com")} 42 <hr/> 43 <h3>fn:split函数使用范例:</h3> 44 <%-- 45 fn:split函数以指定字符串作为分隔符,将一个字符串分割成字符串数组并返回这个字符串数组。 46 fn:split函数接收两个字符串类型的参数,第一个参数表示要分割的字符串,第二个参数表示作为分隔符的字符串 47 --%> 48 fn:split("cnblogs.com",".")[0]的结果是:${fn:split("cnblogs.com",".")[0]} 49 <hr/> 50 <h3>fn:join函数使用范例:</h3> 51 <%-- 52 fn:join函数以一个字符串作为分隔符,将一个字符串数组中的所有元素合并为一个字符串并返回合并后的结果字符串。 53 fn:join函数接收两个参数,第一个参数是要操作的字符串数组,第二个参数是作为分隔符的字符串。 54 如果fn:join函数的第二个参数是空字符串,则fn:join函数的返回值直接将元素连接起来。 55 --%> 56 <% 57 String[] StringArray = {"www","iteye","com"}; 58 pageContext.setAttribute("StringArray", StringArray); 59 %> 60 <%--fn:join(StringArray,".")返回字符串“www.iteye.com”--%> 61 fn:join(StringArray,".")的结果是:${fn:join(StringArray,".")} 62 <br/> 63 <%--fn:join(fn:split("www,iteye,com",","),".")的返回值为字符串“www.iteye.com”--%> 64 fn:join(fn:split("www,iteye,com",","),".")的结果是:${fn:join(fn:split("www,iteye,com",","),".")} 65 <hr/> 66 67 <h3>fn:indexOf函数使用范例:</h3> 68 <%-- 69 fn:indexOf函数返回指定字符串在一个字符串中第一次出现的索引值,返回值为int类型。 70 fn:indexOf函数接收两个字符串类型的参数,如果第一个参数字符串中包含第二个参数字符串, 71 那么,不管第二个参数字符串在第一个参数字符串中出现几次,fn:indexOf函数总是返回第一次出现的索引值; 72 如果第一个参数中不包含第二个参数,则fn:indexOf函数返回-1。如果第二个参数为空字符串,则fn:indexOf函数总是返回0。 73 --%> 74 fn:indexOf("www.iteye.com","eye")的返回值为:${fn:indexOf("www.iteye.com","eye")} 75 <hr/> 76 77 <h3>fn:contains函数使用范例:</h3> 78 <%-- 79 fn:contains函数检测一个字符串中是否包含指定的字符串,返回值为布尔类型。 80 fn:contains函数在比较两个字符串是否相等时是大小写敏感的。 81 fn:contains函数接收两个字符串类型的参数,如果第一个参数字符串中包含第二个参数字符串,则fn:contains函数返回true,否则返回false。 82 如果第二个参数的值为空字符串,则fn:contains函数总是返回true。 83 实际上,fn:contains(string, substring)等价于fn:indexOf(string, substring) != -1 84 忽略大小的EL函数:fn:containsIgnoreCase 85 --%> 86 <% 87 User user = new User(); 88 String likes[] = {"sing","dance"}; 89 user.setLikes(likes); 90 //数据回显 91 request.setAttribute("user",user); 92 %> 93 <%--使用el函数回显数据 --%> 94 <input type="checkbox" name="like" 95 vlaue="sing" ${fn:contains(fn:join(user.likes,","),"sing")?'checked':''}/>唱歌 96 <input type="checkbox" name="like" 97 value="dance" ${fn:contains(fn:join(user.likes,","),"dance")?'checked':''}/>跳舞 98 <input type="checkbox" name="like" 99 value="basketball" ${fn:contains(fn:join(user.likes,","),"basketball")?'checked':''}/>蓝球 100 <input type="checkbox" name="like" 101 value="football" ${fn:contains(fn:join(user.likes,","),"football")?'checked':''}/>足球 102 <hr/> 103 104 <h3>fn:startsWith函数和fn:endsWith函数使用范例:</h3> 105 <%-- 106 fn:startsWith函数用于检测一个字符串是否是以指定字符串开始的,返回值为布尔类型。 107 fn:startsWith函数接收两个字符串类型的参数,如果第一个参数字符串以第二个参数字符串开始,则函数返回true,否则函数返回false。 108 如果第二个参数为空字符串,则fn:startsWith函数总是返回true。 109 与fn:startsWith函数对应的另一个EL函数为:fn:endsWith,用于检测一个字符串是否是以指定字符串结束的,返回值为布尔类型。 110 --%> 111 fn:startsWith("www.iteye.com","iteye")的返回值为:${fn:startsWith("www.iteye.com","iteye")} 112 <br/> 113 fn:endsWith("www.iteye.com","com")的返回值为:${fn:endsWith("www.iteye.com","com")} 114 <hr/> 115 116 <h3>fn:replace使用范例:</h3> 117 <%-- 118 fn:replace函数将一个字符串中包含的指定子字符串替换为其它的指定字符串,并返回替换后的结果字符串。 119 fn:replace方法接收三个字符串类型的参数,第一个参数表示要操作的源字符串,第二个参数表示源字符串中要被替换的子字符串, 120 第三个参数表示要被替换成的字符串。 121 --%> 122 fn:replace("www iteye com ", " ", ".")的返回值为字符串:${fn:replace("www iteye com", " ", ".")} 123 <hr/> 124 125 <h3>fn:substring使用范例:</h3> 126 <%-- 127 fn:substring函数用于截取一个字符串的子字符串并返回截取到的子字符串。 128 fn:substring函数接收三个参数,第一个参数是用于指定要操作的源字符串,第二个参数是用于指定截取子字符串开始的索引值, 129 第三个参数是用于指定截取子字符串结束的索引值,第二个参数和第三个参数都是int类型,其值都从0开始。 130 --%> 131 fn:substring("www.it315.org", 4, 9) 的返回值为字符串:${fn:substring("www.it315.org", 4, 9)} 132 133 <h3>fn:substringAfter函数和fn:substringBefore函数使用范例:</h3> 134 <%-- 135 fn:substringAfter函数用于截取并返回一个字符串中的指定子字符串第一次出现之后的子字符串。 136 fn:substringAfter函数接收两个字符串类型的参数,第一个参数表示要操作的源字符串,第二个参数表示指定的子字符串 137 与之对应的EL函数为:fn:substringBefore 138 --%> 139 fn:substringAfter("www.it315.org",".")的返回值为字符串:${fn:substringAfter("www.it315.org",".")} 140 <br/> 141 fn:substringBefore("www.it315.org",".")的返回值为字符串:${fn:substringBefore("www.it315.org",".")} 142 <hr/> 143 </body> 144 </html>
package com.hlx; 2 3 public class User { 4 5 /** 6 *爱好 7 */ 8 private String likes[]; 9 10 public String[] getLikes() { 11 return likes; 12 } 13 14 public void setLikes(String[] likes) { 15 this.likes = likes; 16 } 17 }
总之:EL表达式有以下作用
(1)可以用于获取JavaBean的属性 如: {student.uname} or {student["uname"]} or {student['uname']}
(2)能够读取集合类型对象中的元素 如:{list[0]}...
(3)运用运算符进行数据处理 如:${10+15}
(4)屏蔽常见的异常 如:复选框的值不选择,则不发生任何异常
(5)自动实现类型转换 如:${user.score+5}