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