一、EL
-
EL表达式作用:代替JSP页面中表达式脚本进行数据的输出(只能获取数据,不能设置数据)
-
EL表达式的格式是:${表达式} ,注:EL表达式写在jsp页面中,表达式一般是域对象的key
(一)搜索域表示式的顺序
(二)表达式
1、条件运算
2、逻辑运算
3、算术运算
4、empty运算
empty运算可以判断一个数据是否为空,若为空,输出true,不为空,输出false 以下几种情况为空(在原本的key之前加empty关键字):
<%
//值为null
request.setAttribute("emptyNull",null);
//值为空串
request.setAttribute("emptyStr","");
//值为Object类型的数组且长度为0 (注:其他类型的长度为0的数组值为非空)
request.setAttribute("emptyArr",new Object[]{});
//List集合元素个数为0
List<String> list = new ArrayList<>();
request.setAttribute("emptyList",list);
//Map集合元素个数为0
Map<String,Object> map = new HashMap<>();
request.setAttribute("emptyMap",map);
%>
${empty emptyNull}
${empty emptyStr}
${empty emptyArr}
${empty emptyList}
${empty emptyMap}
5、三元运算
表达式 1?表达式 2:表达式 3 表达式1为真返回表达式2的值,表达式1为假返回表达式3的值
${ 12 != 12 ? "相等":"不相等" }
6、“.”点运算和“[ ]”中括号运算
.点运算可以输出某个对象的某个属性的值(getXxx或isXxx方法返回的值)
[]中括号运算可以输出有序集合中某个元素的值
注:中括号运算可以输出Map集合中key里含有特殊字符的key的值
<%
Map<String,Object> map = new HashMap<>();
map.put("a+a","aaaaaa");
map.put("b+b","bbbbbb");
map.put("c.c","cccccc");
request.setAttribute("map",map);
%>
${ map["a+a"] }<br>
${ map["b+b"] }<br>
${ map["c.c"] }<br>
(三)11个隐含对象
EL表达式中的11个隐含对象是EL表达式自己定义的,可以直接使用
四个访问作用域
作用域 | Java代码取值 | EL取值 |
---|---|---|
请求作用域 | request.getAttribute("news"); | ${ requestScope.news} |
会话作用域 | session.getAttribute("username"); | ${ sessionScope.username } |
程序作用域 | application.getAttribute("count"); | ${applicationScope.count} |
页面作用域 | pageContext.getAttribute("userNum"); | ${ pageScope.userNum } |
二、JSTL标签库
(一)下载与使用
1、下载JSTL的jar包地址:Apache Taglibs - Apache Standard Taglib: JSP[tm] Standard Tag Library (JSTL) implementations
2、在文件中导入加载这两个jar包
3、使用taglib指令引入标签库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(二)<c:set>
作用:set标签可以向域中保存数据
域对象.setAttribute(key,value)
scope:属性设置保存到哪个域中
page-------------->PageContext域中
request---------->Request域中
session------------>Session域中
application------->ServletContext域中
var属性设置key是多少
value属性设置
保存前:${requestScope.aaa}
<c:set scope="request" var="aaa" value="aaaValue"/>
保存后:${requestScope.aaa}
(三)<c:if>
作用:做if判断
test属性表示判断条件
//判断12是否等于13,等于十三输出h3标签的内容,不等于则不输出
<c:if test="${12 == 13}">
<h3>12不等于13</h3>
</c:if>
(四)<c:choose>...<c:when>...<c:otherwise>
作用:多路判断
相当于switch······case······ default
<%
request.setAttribute("score",98);
%>
<c:choose>
当成绩大于80时,输出优秀
<c:when test="${requestScope.score > 80 }">
<h3>优秀</h3>
</c:when>
<c:when test="${requestScope.score > 60 }">
<h3>及格</h3>
</c:when>
其他,输出不及格
<c:otherwise>
<h3>不及格</h3>
</c:otherwise>
</c:choose>
(五)<c:forEach>
1、遍历打印1-10
//遍历打印1-10
//begin:开始索引 end:结束索引位置 var:变量
<c:forEach begin="1" end="10" var="i">
${i}
</c:forEach>
2、遍历数组
items:遍历的集合
var:当前遍历到的数
<%
request.setAttribute("arr",new Object[]{"李梅","韩梅梅","李华"});
%>
<c:forEach items="${requestScope.arr}" var="arr">
<h3>${arr}</h3>
</c:forEach>
3、遍历Map集合
<%
Map<String,Object> map = new HashMap<>();
map.put("1","aa");
map.put("2","bb");
map.put("3","cc");
request.setAttribute("map",map);
%>
<c:forEach items="${requestScope.map}" var="item">
<%--键--%>
<h3>${item.key}</h3>
<%--值--%>
<h3>${item.value}</h3>
</c:forEach>
(六)其他标签
标签名称 | 作用 |
---|---|
<c:out /> | 输出文本内容到out对象,常用于显示特殊字符,显示默认值 |
<c:set /> | 在作用域中设置变量或对象属性的值 |
<c:remove/> | 在作用域中移除变量的值 |
<c:if/> | 实现条件判断结构 |
<c:forEach/> | 实现循环结构 |
<c:url/> | 构造url地址 |
<c:param/> | 在url后附加参数 |
<c:import/> | 在页面中嵌入另一个资源内容 |
<fmt:formatDate/ | 格式化时间 |
<fmt:formatNumber/ | 格式化数字 |