EL表达式
定义:EL(Expression Language 表达式语言)定义了一系列隐含对象和操作符,无须Java代码即可方便地访问pageContext、request、session、application作用域中的对象。
1.EL表达式显示数据
1.基本数据类型与String类型 ${key(setAttribute中的key)
2.自定义类型
a、在页面中要显示的自定义类成员变量必须要有getter;
b、如何显示:${key(setAttribute中的key).成员变量名}
例如
3.集合或数组
a、对于list等有序集合,可以直接${list[0] }进行显示,也可以用ELST的forEach进行遍历集合。
b、对于map、set等无序集合,只能用ELST的forEach进行遍历集合。
c、对于数组,可以直接${numbers[0] }进行显示,也可以用ELST的forEach进行遍历集合。
d、对于set集合,无法获取单个元素,只能使用<c:forEach>遍历集合
注意:
1、Map集合的key最好符合Java标识符规范,如果不符合,则在EL表达式中不能使用.的方式获取到Map相应的value,只能通过[]的方式获取到相应的value;
2、Map集合key的泛型不能是Java基本数据类型的包装类,否则EL表达式无论使用那种方式都无法获取到相应的value。
2.点和[]操作符
点操作符:EL表达式通常由两部分组成:对象和属性。在EL表达式中,可以使用点操作符来访问对象的属性,例如${user.id}就是访问user对象的id属性。
[]操作符:
[]操作符也可以访问对象的属性,例如${user.id}也可以写成${user[“id”] }。当要存取的属性名称中包含一些特殊字符,如“.”或“-”等非字母或数字的符号时,就需要使用[]操作符。例如${user.my.id}应当改为${user[“my.id”] }。当动态取值时,需要用[]操作符来做,而点操作符无法做到动态取值,例如在${sessionScope.user[index] }中,index时一个变量。
3.EL表达式中的运算符
1.算数运算符
运算符号:+、-、*、/或div(没有按照最高精度保留结果的特点)、%或mod
${变量1 运算符号 变量2 } 例如求a与b的和为${a + b} 注意:不会按最高精度保留结果
并且可以进行两目与三目运算
2.关系运算符
运算符符号:= =或eq、!=或ne、<或lt(即less than)、>或gt(即great than)、<= 或 le、>= 或 ge
${变量1 运算符号 变量2 } 例如判断a是否大于b为${a > b}
3.逻辑运算符
运算符符号:&& 或 and、|| 或 or、! 或 not(注意:只能对boolean型数据运算)
${变量1 运算符号 变量2 } 例如逻辑与 ${a && b}
4.empty运算符
用于判断集合或者数组是否为空或值为null,若为空,则判断为true,若不为空,则判断为false
判断list集合是否为空 ${empty list}
JSTL标签库
定义:JSTL(JSP Standard Tag Library,JSP标准标签库)是一个开源代码的JSP标签库
1.JSTL函数库
1.使用方法:
a.向web工程lib文件中导入相应的jstl jar文件
b.引入jstl函数库
其中,前缀prefix可自定义,语句中其它成分都不可更改。
注意:jstl函数只能在${}中使用
2.语句
1、${fn:length(address) }
fn:length:返回字符串、集合或数组的长度。
2、${fn:substring(address,0,10) }
fn:substring:用于截取某个字符串并返回截取到的子字符串。第一个参数为源字符串,第二个参数为截取开始的索引值, 第三个参数为截取结束的索引值,其中第二个参数和第三个参数都是int类型,其值都从0开始。
JSTL标签库
1.使用方法
a.同上
b.引入jstl标签库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
2.语句
1.表达式标签:
a. set标签,用于在jsp中声明变量
<c:set var="name" value="Tom"></c:set>
设置name的属性值为Tom。
b. out标签,用于显示数据
<c:out value="${name }"></c:out>
输出name的值,与${name }作用相同,故一般少见
3. remove标签,用于移除变量
<c:remove var="name"/>
移除名为name的变量
2.流程控制标签
a. if标签,该标签和Java中的if条件语句一样,用于实现条件控制
<c:if test="${a!=b }">
不等于
</c:if>
判断test=“~”中的语句是否为true,如果为true,则输出if标签中的语句(这里是”不等于“)
b. choose标签,when标签与otherwise标签,一般一起使用,来构成类似“if——else if——else”的复杂条件判断
<c:choose>
<c:when test="${fn:length(address)>10 }"> (满足test后语句则执行when语句中的操作)
${fn:substring(address,0,10) }...
</c:when>
<c:otherwise> (可有多个when标签,若所有when标签的test语句都不满足,则执行otherwise标签里的语句)
${address }
</c:otherwise>
</c:choose>
c. 循环标签
<c:forEach var="s" items="${set }">
${s }
</c:forEach>
c:forEach:类似于java的foreach语法,s代表遍历时每一个成分。