EL出现的原因
在JSP页面中,经常用JSP表达式<%=变量/表达式%>来输出声明的变量以及页面传递的参数,当变量很多时,书写这样的表达式会显得很累赘,那么EL标签就解决了这个问题,简化了表达式
EL标签的语法
${参数名}
例如${param.name}等价于<%=request.getParameter(‘name’)%>
EL标签的功能
可以访问JSP中不同域的对象(application、Session、Request、PageContext)
可以访问Java Bean中的属性
可以访问集合元素
支持简单的运算符操作
EL表达式
EL(Expression Language 表达式语言)定义了一系列隐含对象和操作符,无须Java代码即可方便地访问pageContext、request、session、application作用域中的对象。
1.EL表达式显示数据
1.1基本数据类型与String类型
1.2自定义类型
a、在页面中要显示的自定义类成员变量必须要有getter;
b、如何显示:${key(setAttribute中的key).成员变量名}
1.3集合或数组
List
数组
Set集合:无法获取单个元素,但可以使用<c:forEach></c:forEach>遍历set集合中元素。
Map集合
注意:
1、Map集合的key最好符合Java标识符规范,如果不符合,则在EL表达式中不能使用.的方式获取到Map相应的value,只能通过[]的方式获取到相应的value;
2、Map集合key的泛型不能是Java基本数据类型的包装类,否则EL表达式无论使用那种方式都无法获取到相应的value。
点和[]操作符
点操作符:EL表达式通常由两部分组成:对象和属性。在EL表达式中,可以使用点操作符来访问对象的属性,例如
u
s
e
r
.
i
d
就
是
访
问
u
s
e
r
对
象
的
i
d
属
性
。
[
]
操
作
符
:
[
]
操
作
符
也
可
以
访
问
对
象
的
属
性
,
例
如
{user.id}就是访问user对象的id属性。 []操作符: []操作符也可以访问对象的属性,例如
user.id就是访问user对象的id属性。[]操作符:[]操作符也可以访问对象的属性,例如{user.id}也可以写成
u
s
e
r
[
“
i
d
”
]
。
当
要
存
取
的
属
性
名
称
中
包
含
一
些
特
殊
字
符
,
如
“
.
”
或
“
−
”
等
非
字
母
或
数
字
的
符
号
时
,
就
需
要
使
用
[
]
操
作
符
。
例
如
{user[“id”] }。当要存取的属性名称中包含一些特殊字符,如“.”或“-”等非字母或数字的符号时,就需要使用[]操作符。例如
user[“id”]。当要存取的属性名称中包含一些特殊字符,如“.”或“−”等非字母或数字的符号时,就需要使用[]操作符。例如{user.my.id}应当改为
u
s
e
r
[
“
m
y
.
i
d
”
]
。
当
动
态
取
值
时
,
需
要
用
[
]
操
作
符
来
做
,
而
点
操
作
符
无
法
做
到
动
态
取
值
,
例
如
在
{user[“my.id”] }。当动态取值时,需要用[]操作符来做,而点操作符无法做到动态取值,例如在
user[“my.id”]。当动态取值时,需要用[]操作符来做,而点操作符无法做到动态取值,例如在{sessionScope.user[index] }中,index时一个变量。
2.EL表达式中的运算符
1.1算数运算符
运算符号:+、-、*、/或div(没有按照最高精度保留结果的特点)、%或mod
注意:单引号和双引号都可以。
1.2关系运算符
运算符符号:= =或eq、!=或ne、<或lt(即less than)、>或gt(即great than)、<= 或 le、>= 或 ge
1.3逻辑运算符
运算符符号:&& 或 and、|| 或 or、! 或 not(注意:只能对boolean型数据运算)
1.4empty运算符
说明:如果集合或数组中没有数据,或者其值为null,则empty判断为true,not empty判断为false
jstl标签库:
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个开源代码的JSP标签库
1.jstl函数库
1.1如何使用:
a、向web工程lib文件中导入相应的jstl jar文件
b、引入jstl函数库
注意:jstl函数只能在${}中使用
1.2fn:toLowerCase:返回字符串小写格式
1.3fn:toUpperCase:返回字符串大写格式
1.4fn:trim:返回删除原字符串首尾空格后的字符串
1.5fn:length:返回字符串、集合或数组的长度
注意:${}中可以有多个jstl函数
1.6fn:split:返回依照指定字符串分隔符分割的字符串数组数,第一个参数为待分割字符串,第二个参数为字符串分隔符
1.7fn:join:依照字符串间隔符连接字符串数组元素并返回合并后的结果字符串,第一个参数为待合并的字符串数组,第二个参数为间隔符字符串。
注意:fn:join方法只对元素为String类型的数组进行元素拼接。
1.8fn:indexOf:返回指定字符串在某个字符串中第一次出现的索引值,返回值为int类型,如果没有找到则返回-1,第一个参数为待查找的字符串,第二个参数为要查找的字符串
注意:jstl函数库中没有fn:lastIndexOf函数
1.9fn:contains:判断一个字符串中是否包含指定的字符串,第一个参数为待判断字符串,第二个参数为判断字符串,返回值为布尔类型。该函数对比较的两个字符串大小写敏感,而fn:containsIgnoreCase则对大小写不敏感
1.10 fn:startsWith:判断某个字符串是否以指定字符串开头,返回值为布尔类型。
1.11 fn:endsWith:判断某个字符串是否以指定字符串结尾,返回值为布尔类型。
1.12 fn:replace:将某个字符串中包含的指定子字符串替换为其它的指定字符串,并返回替换后的结果字符串。第一个参数为原字符串,第二个参数为原字符串中要被替换的子字符串,第三个参数为被替换成的字符串。
1.13 fn:substring:用于截取某个字符串并返回截取到的子字符串。第一个参数为源字符串,第二个参数为截取开始的索引值,第三个参数为截取结束的索引值,其中第二个参数和第三个参数都是int类型,其值都从0开始。
1.14 fn:substringAfter:用于截取并返回一个字符串中的指定字符串第一次出现之后的字符串。第一个参数为源字符串,第二个参数为指定字符串
1.15 fn:substringBefore:用于截取并返回一个字符串中的指定字符串第一次出现之前的字符串。第一个参数为源字符串,第二个参数为指定字符串
2.jstl标签库
<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
2.1 表达式标签:out标签、set标签、remove标签、catch标签。
2.1.1 out标签,该标签用于显示数据,如下语法:
<c:out value=”所显示的数据” [escapeXml=”true|false”] [default=”默认值”]/>,其中escapeXml属性用来设定是否对所显示的数据中的html标签或者JavaScript脚本进行解析,默认true,即不解析;default属性用于设置默认值,该默认值在value没有数据的情况下显示。
a、 原样输出,相当于escapeXml=“true”时
b、 JavaScript脚本会执行
2.1.2 set标签,该标签用于在jsp中声明变量,如下语法:
<c:set var=”key” value=”值”[scope=”page|request|session|application”]/>,scope用于指定把一个变量名为key值为“值”的变量存储范围标签
a、,jsp页面显示小王,同属一个工程中的其它含有${userName}的jsp页面不会显示小王,因为这时数据默认适用范围为page
b、
其所在jsp页面显示小王,同属一个工程中的其它含有${userName}的jsp页面也会显示小王
2.1.3 remove,该标签用于移除指定的scope范围内的变量,如下语法:
<c:remove var=”变量名” [scope=”page|request|session|application”]/>
a、
2.2 流程控制标签:if标签、choose标签、when标签、otherwise标签。
2.2.1 if标签,该标签和Java中的if条件语句一样,用于实现条件控制
<c:if test=“testCondition” [var=“varName”] [scope="{page|request|session|application}"]>
标签体内容
</c:if>
【说明】:
(1)test属性用于存放判断的条件,一般为EL表达式。
(2)var属性用于存放判断结果,类型为true或false。
(3)scopes属性用于指定var属性存放的范围。
a、
2.2.2 choose标签、when标签和otherwise标签,这三个标签一般一起使用,用于构造类似Java中 “if-else if-else” 的复杂条件判断。注意:choose标签是其它两个标签的父标签
a、
2.3 循环标签:forTokens标签和forEach标签,forEach标签用于遍历集合或数组中的数据,如下语法:
<c:forEach var=”name” items=”集合或数组” [varStatus=”status”]
[begin=”begin”] [end=”end”] [step=”step”]>
循环体
</c:forEach>
【说明】:
(1)var设定变量名,该变量名用于存储从集合或数组中遍历出来的元素数据。
(2)items指定要遍历的集合。
(3)varStatus设定变量名,该变量名保存了循环进行过程中的状态信息,
包括:index(当前循环索引)、count(循环的次数)、first(是否为第一个位置)和last(是否为最后一个位置)。
(4)begin、end用于指定遍历的起始位置和终止位置。
(5)step指定循环的步长,默认为1。
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>
EL表达式和jstl标签只能用在JSP文件中。