EL表达式
EL表达式全称:Expression Language,即表达式语言EL表达式作用:代替JSP页面中表达式脚本进行数据的输出(只能获取数据,不能设置数据)EL表达式的格式是:${表达式} ,EL表达式写在jsp页面中,表达式一般是域对象的key,简化了jsp表达式的使用
它可以通过变量名取值
它可以获取对象属性值
它可以获取对象集合元素
它可以执行表达式
1.基本格式,el表达式放在{}中,并且前面有个$作为前缀
${… }
2.获取对象
${user }
未指定域则按照域的范围从小到大找到或者找完为止
3.获取属性
${user.name }
本质,调用get方法获取值,若有get方法则有,若没有get方法会报错
${user[“name”] }
4.获取Map中的属性可以直接通过属性的key
${map.key }
${map[key] }
5.指定域
${ pageScope .user}:当前页面
${requestScope.user}:当前请求
${sessionScope.user}:当前会话
${sessionScope.user}:当前应用
隐式对象
pageContext,可以获取全部可获得对象
请求域
请求域主要用于获取域对象中的属性,四个对象分别对应四个请求域
pageScope
requestScope
sessionScope
applicationScope
请求参数
参数对象用于获取get或post请求中的参数。
param:获取指定请求参数,后跟参数名。
paramValues:获取请求参数数组,返回一个string类型的数组。
逻辑操作
+ 加 ${17+5} 22
- 减 ${17-5} 12
* 乘 ${17*5} 85
/ div 除 ${17/5}或${17 div 5} 3
% mod 取余 ${17%5}或${17 mod 5} 2
== eq 等于 ${5==5}或${5 eq 5} true
!= ne 不等于 ${5!=5}或${5 ne 5} false
< lt 小于 ${3<5}或${3 lt 5} true
> gt 大于 ${3>5}或${3 gt 5} false
<= le 小于等于 ${3<=5}或${3 le 5} true
>= ge 大于等于 ${3>=5}或${3 ge 5} false
&& and 并且 ${true&&false}或${true and false} false
! not 非 ${!true}或${not true} false
|| or 或者 ${true||false}或${true or false} true
empty 是否为空 ${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。 empty还可以与not或!一起使用。${not empty “”} true
jstl
el表达式封装了数据访问的功能,jstl标签库封装了逻辑控制、循环控制以及数据格式化等功能,二者结合可以完整实现动态页面的开发需求
<dependency><groupId> javax.servlet </groupId><artifactId> jstl </artifactId><version> 1.2 </version></dependency>
格式化库<% @ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>核心库<% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
core标签库常用标签
<c:out value=”aaa”/> | 输出aaa字符串常量 |
---|---|
<c:out value=”${aaa}” default=”xxx”/> | 当${aaa}不存在时,输出xxx字符串 |
<c:out value=”${aaa}”/> | 与${aaa}相同 |
<c:out value="${a }" default=“xxx” escapeXml=“false” />
<c:set var=”a” value=”hello”/> 在pageContext中添加name为a,value为hello的数据。
<c:set var=”a” value=”hello” scope=”session”/> 在session中添加name为a,value为hello的数据。
remove标签
c:remove var="a" scope=”page”/ 删除pageContext中name为a的数据
if标签:if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行
<c:set var="a" value="hello"/>
<c:if test="${not empty a }">
<c:out value="${a }"/>
</c:if>
choose标签:choose标签对应Java中的if/else if/else结构。when标签的test为true时,会执行这个when的内容。当所有when标签的test都为false时,才会执行otherwise标签的内容。
<c:set var="score" value="${param.score }"/>
<c:choose>
<c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>
<c:when test="${score >= 90 }">A级</c:when>
<c:when test="${score >= 80 }">B级</c:when>
<c:when test="${score >= 70 }">C级</c:when>
<c:when test="${score >= 60 }">D级</c:when>
<c:otherwise>E级</c:otherwise>
</c:choose>.
forEach标签:
<%
String[] names = {"zhangSan", "liSi"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
<c:out value="name: ${item }"/><br/>
</c:forEach>.
遍历List
<%
List<String> names = new ArrayList<String>();
names.add("zhangSan");
names.add("liSi");
names.add("wangWu");
names.add("zhaoLiu");
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
<c:out value="name: ${item }"/><br/>
</c:forEach>.
遍历Map
<%
Map<String,String> stu = new LinkedHashMap<String,String>();
stu.put("number", "N_1001");
stu.put("name", "zhangSan");
stu.put("age", "23");
stu.put("sex", "male");
pageContext.setAttribute("stu", stu);
%>
<c:forEach var="item" items="${stu }">
<c:out value="${item.key }: ${item.value }"/><br/>
</c:forEach>.
- count:int类型,当前以遍历元素的个数;
- index:int类型,当前元素的下标;
- first:boolean类型,是否为第一个元素;
- last:boolean类型,是否为最后一个元素
fmt标签库常用标签:fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字。
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
......
<%
Date date = new Date();
pageContext.setAttribute("d", date);
%>
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>。
<%
double d1 = 3.5;
double d2 = 4.4;
pageContext.setAttribute("d1", d1);
pageContext.setAttribute("d2", d2);
%>
<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
<fmt:formatNumber value="${d2 }" pattern="#.##"/>。