JAVA Web基础6-EL表达式与JSTL标签库

一.EL表达式语言
1.EL表达式全称expression language,用于在JSP页面获取其内置对象的内容
语法:${...}
在jsp中page指令有一个属性是isELIgnored, 用来标记此页面是否忽略EL表达式, 默认为false,即不忽略
2.用法说明
常规写法举例:<%= request.getAttribute("test")>
EL表达式写法:${test}//当作用域属性名都是唯一时可以这么写
            ${requestScope.test}//表示获取请求作用域中属性名为test的值
            ${requsetScope["test"]}
.与[]的写法多数情况下可以通用,但下列几种情况只能用[]的写法:
当表达式中有特殊字符如test_name则只能用[]的写法;
当需要获取动态属性时则只能用[]的写法,即[]中可以写变量名;
[]也可以用来表示数组或者集合中的索引值,如arr的值为{a,b,c},可以通过${arr[0]}的方式获取a;
3.EL变量
${test}
当前面不指定哪个作用域下面的值的时候, 会默认按照下面的顺序去找, 如果都找不到, 就输出一个空字符串
pageScope --> requestScope --> sessionScope --> applicationScope
4.EL中可以对获取的值自动进行类型转换
如获取的test1和test2中的值为字符串型数值,可以直接进行运算:${test1 + test2}
5.获取请求参数
获取请求参数可通过表单或超链接方式获取
常规写法:<%= request.getParameter("name")>
EL表达式写法:${param.name}
6.EL运算符
算术运算符: +   -   *   /或div   %或mod    例:${5 div 3 } 或${5 / 3 }
关系运算符: ==或eq(equals)   !=或ne(not equals)   <或lt(less than)   >或gt(great then)   <=或le(less equals)   >=或ge(great equals)
逻辑运算符: &&或and   ||或or   !或not
验证运算符: empty(empty 对于 null和"" 的判断都是返回true)
例:使用验证运算符实现当变量test的值为空时,输出"test为空",否则输出test值
${empty test?"test为空":test}
二.JSTL标签库应用
JSTL全称JSP Standard Tag Library(标准标签库),由五个功能不同的标签库组成,分别是核心标签库、格式标签库、SQL标签库、XML标签库、函数标签库。

标签库的使用需要引入两个jar包:jstl.jar和standard.jar包,将其放置在WEB-INF的lib文件夹下。
使用这些标签库必须在JSP页面顶部使用<%@ taglib %>指令定义引用的标签库和访问前缀;由于实际项目开发中一般只应用核心标签库,所以这里主要学习核心标签库的内容。
核心标签库的指令格式为:<%@ taglib uri="http ://java.sun.com/jsp/jstl/core" prefix="c" %> 这里将前缀定义为c是约定俗称的。
核心标签库里主要包括表达式标签、流程控制标签、循环标签。
1.表达式标签
<c: out /> 或<c: out></c:out>;输出标签
格式:
<c: out value="" default="" escapeXml="ture/false"/>
相当于<%= 表达式%>,分为有标签体和没有标签体,功能一样;
value:可以直接赋值常量,也可以赋值EL表达式:value="${test}" ;该标签会将引号里的值输出;
default:默认输出值,当value值为null时输出此值,如果也不定义默认值则输出空字符串;
escapeXml:控制转义字符;默认为true;也就是默认情况下如果值里有标签存在则视为字符串;


<c: set/>或<c: set></c: set>;变量设置标签
格式
<c: set var="" value="" scope="">
var:指定变量名;
value:指定变量值;可以为EL;也可以写在标签体中如:<c:set var="t" value="小明" />或<c:set var="t1">小明</c:set>
scope:指定变量作用域;默认为page,可选值包括:page,request,response,application;


<:c remove/>;变量移除标签
格式:
<c: remove var="" scope=""/>
var:指定要移除的变量名
scope:指定要移除的变量有效范围,当不同范围的变量名有重复的时候, 可以通过这个属性来确定移除的是哪个, 如果不指定, 则全部移除掉,默认值为page;


<c: catch></c: catch>;捕获异常标签
格式:
<c: catch var="">
    可能存在异常的代码:${5 / 0}
</c: catch>
var:指定存储异常信息的变量,如不保存,可省略了;类似于try...catch;上述代码会输出Infinity(无限大),属于EL表达式里的异常;
2.流程控制标签
<c:if></c:if>条件判断标签
格式:
<c:if var ="" test="" scope="">
    标签体
</c:if>
var:指定判断结果的变量名;
test:必选属性,指定条件表达式,可以用EL,返回值为true或false,当为true时,执行标签体,标签体里可以为任何JSP能够使用的元素;
scope:指定变量的有效范围;


<c:choose></c:choose>;条件选择标签
一般与<c:when></c:when>条件测试标签和<c:otherwise></c:otherwise>其他条件标签组合使用,类似于switch...case语句
格式:
<c:choose>
    <c:when test="">
        <c:out value=""></c:out>//或其他标签体
    </c:when>
    <c:otherwise>//可不写
        <c:out value=""></c:out>
    </c:otherwise>
</c:choose>
3.循环标签
<c:forEach></c:forEach>循环标签
用于遍历集合或数组中的所有或部分数据
格式:
<c: forEach  items = "" var = "list" begin="" end="" step="" varStatus="vs" >
    ${list} ${vs.index} ${vs.count} ${vs.first} ${vs.last}
</c:forEach>
items: 指定需要遍历的数组或者集合
var: 设定一个变量名来存储从数组或者集合中遍历出来的值
begin, end: 指定需要遍历的开始, 结束位置,默认全部遍历
step: 每次遍历跳过的个数, 默认值为1
varStatus:指定循环状态变量
index:在原集合中的索引值, 从0开始
count:当前循环计数,从1开始,
first:是否是当前循环第一个
last:是否是当前循环最后一个
注意first和last, 是判断的是否在输出结果中的第一个或者最后一个, 并不是原来的集合中
例:输出1到10之间所有整数
<c:forEach var ="i" begin="1" end= "10">
    ${i},
</c:forEach>


<c: forTokens></c: forTokens>迭代标签
用于使用指定分隔符分割字符串,并遍历分割后的字符串数组;
格式:
<c:forTokens items="" delims="" var=""></c:forTokens>
items:指定要迭代的String对象
delims:指定分隔符,可以同时有多个如:delims=", ; : "
var:指定变量名,保存分割后的字符串
其他属性用法同forEach标签

原文地址:https://www.cnblogs.com/wyc1991/p/9131415.html