EL运算符
操作符 | 描述 |
---|---|
. | 访问一个Bean属性或者一个映射条目 |
[] | 访问一个数组或者链表的元素 |
( ) | 组织一个子表达式以改变优先级 |
+ | 加,支持数值类型 |
- | 减或负 |
***** | 乘 |
/ or div | 除 |
% or mod | 取模 |
== or eq | 测试是否相等 |
!= or ne | 测试是否不等 |
< or lt | 测试是否小于 |
> or gt | 测试是否大于 |
<= or le | 测试是否小于等于 |
>= or ge | 测试是否大于等于 |
&& or and | 测试逻辑与 |
|| or or | 测试逻辑或 |
! or not | 测试取反 |
empty | 测试是否空值 (null “” 集合中没有元素也认为是空) |
EL隐式对象
${a}:在作用域中,从小往大匹配key为a的值。
${“a”}:字符串常量。
隐含对象 | 描述 |
---|---|
pageScope | page 作用域 |
requestScope | request 作用域 |
sessionScope | session 作用域 |
applicationScope | application 作用域 |
cookie | Cookie值 (会话部分讲解) |
pageContext | pageContext对象 |
param | 读取单个参数 |
paramValues | 读取重复参数 |
el表达式无法调用方法
读作用域的数据
<%
pageContext.setAttribute("a", "sadss");
%>
jsp表达式读法:<%=pageContext.getAttribute("a") %><br>
el表达式读法1:${pageScope.a }<br>
el表达式读法2:${pageScope["a"] }<br>
el简化写法:${a }//从小往大查找key为a的作用域的值,pageScore<requestScore<sessionScore<applicationScore
结果:
jsp表达式读法:sadss
el表达式读法1:sadss
el表达式读法2:sadss
el简化写法:sadss
读取请求参数
jsp表达式读取参数:<%=request.getParameter("name") %><br>
重复参数:<%=request.getParameterValues("hobbies")[0] %>
<%=request.getParameterValues("hobbies")[1] %>
<br>
el读取参数1:${param.name }<br>
重复参数:${paramValues.hobbies[0]}
${paramValues.hobbies[1]}
<br>
el读取参数2:${param["name"] }<br>
重复参数:${paramValues["hobbies"][0]}
${paramValues["hobbies"][1]}
el读取cookie:
${cookie.JSESSIONID.name}=${cookie.JSESSIONID.value}
<br>
获取上下文路径:
${pageContext.request.contextPath}
结果:
jsp表达式读取参数:king
重复参数:ss lkskl
el读取参数1:king
重复参数:ss lkskl
el读取参数2:king
重复参数:ss lkskl
el读取集合
<%
List<Student> list=new ArrayList<>();
list.add(new Student(1,"king"));
list.add(new Student(2,"ting"));
pageContext.setAttribute("list",list);
Map<String,Student> map=new HashMap<>();
map.put("s11",new Student(1,"king"));
map.put("s22",new Student(2,"ma"));
pageContext.setAttribute("map",map);
%>
el读取数组:${list[0].sname }<br>
${list[1].sid}
<br>
el读取map:
${map['s11'].sid}<br>
<%--map的键不能以数字开头,否则不能用下面这个方法--%>
${map.s11.sid}
结果:
el读取数组:king
2
el读取map: 1
1
el与jsp表达式区别
jstl
<%!
public String getName() {
return "aa";
}
%>
<body>
c:out:<br>
<c:out value="aaaa"></c:out>
<br>
<c:out value="<%=getName() %>"/>
<br>
2 set:<br>
<%--字符串类型值可以直接存储--%>
<c:set var="a" value="aaaa" scope="page"></c:set>
获取a:${a}
<%--等价于下面这个--%>
<%--<%--%>
<%--pageContext.setAttribute("a","aaaa");--%>
<%--%>--%>
<%--对象类型的值--%>
3 catch标签:<br>
<c:catch var="e">
<%
int i=10/0;
%>
</c:catch>
${e.message }<br>
2 remove标签:<br>
<c:remove var="e"></c:remove>
${e.message }<br>
3 if标签:<br>
<c:if test="${empty e}">没有出错信息</c:if>
4 choose+when+otherwise标签:
<c:choose>
<c:when test="${param.age<12}">儿童</c:when>
<c:when test="${param.age<18}">少童</c:when>
<c:otherwise>成年</c:otherwise>
</c:choose>
迭代标签
<%
List<Student> list=new ArrayList<>();
list.add(new Student(1,"king"));
list.add(new Student(2,"ting"));
pageContext.setAttribute("list",list);
%>
<%--forEach增强for:--%>
<c:forEach items="${list }" var="stu">
${stu.sid},${stu.sname}<br>
</c:forEach>
<%--2 标准for--%>
<c:forEach var="i" begin="0" end="2" step="1">
${list[i].sid},${list[i].sname},<br>
</c:forEach>