EL表达式
是为了让jsp写起来更简单,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
~在jsp页面直接使用。
~EL用来代替<%=…%>,<%=…%>代表输出,EL表达式是用来输出的。
语法:
${表达式}
<% out.print(request.getAttribute("name")); %>
<!-- 被以下方式替换了 -->
<%=request.getAttribute("name")%>
<!--又被以下El表达式替换了 -->
${name}
pageScope:表示pageContext的域对象
requestScope:表示request域对象
sessionScope:表示session域对象
applicationScope:表示application域对象
1.从某个范围取值
从四个域中通过key找到简单数据并显示出来
四个域的寻找顺序是 pageContext,request,session,application。若找不到键值为name的属性值,不会显示null,会显示空字符串。也可以从指定范围内取值。
${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}
当不存在重名现象时,前半部分可以省略。例 ${name} .
2.取数组、list集合中的值
<%
String[] hobbys = {"read","running"};
pageContext.setAttribute("habbys", habbys);
List<String> list = new ArrayList<String>();
list.add("跑步");
list.add("游泳");
request.setAttribute("list",list);
%>
<!-- 相当于 pageContext.findAttrbite("names")[0] -->
<!-- 缺点:只能指定数组下标取值,不能遍历 -->
${hobbys[0] }<br />
${list[1] }<br />
3.EL表达式支持运算符
1)语法:${运算表达式}
2)常见运算符:==(eq) !=(ne) <(lt) >(gt) <=(le) >=(ge) &&(and) ||(or) !(not)
~括号内与符号作用相同。
3)判断是否为空
语法:${empty name }
Empty i:用于判断是否某个值是否存在。如果一个字符串为””则也是true.
ii:用于判断集合类是否里面没有数据.
<%
List list2 = new ArrayList();
pageContext.setAttribute("a",list2);
%>
${empty a}
4.三目运算符
${a==b?1:0}
JSTL标签
~Java Standard Tag Libraray,是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言。
~不是JSP的内置标签,使用时需要导包(jstl-1.2.jar)。
JSTL标签库包括五个,分别是
1、core:核心标签库 核心标签,执行一些输出,设置值,可遍历
2、fmt:格式化标签库 格式化标签,可格式化日期、数字等
3、sql:数据库标签库 用于在页面执行sql
4、xml:xml标签库 操作XML的标签
5、JSTL函数 字符串处理函数
JSP页面中使用taglib指令导入标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- prefix="c":指定标签库的前缀 -->
<!-- uri="http://java.sun.com/jstl/core":指定标签库的uri -->
core标签:
1)c:out 输出信息到页面,相当于${}
<c:out value="jack"></c:out>
配合EL表达式使用:
<%
request.setAttribute("name", "lisi");
%>
<br/>
${name}
<br/>
<!-- default:默认值 -->
<c:out value="${name}" default="没有值"></c:out>
2)c:set 设置值
<c:set var="cset" value="hello c:set" scope="request"></c:set>
${requestScope.cset }
3)c:remove 删除值
<c:remove var="cset" scope="request"/>
${cset }
Scope: 可选四大域对象page|request|session|application,默认为page
4)c:url 输出路径
<c:url var="curl" value="/index.jsp"></c:url>
<a href="${curl}">GO</a>
5)c:if 判断
<c:if test="${param.age<18 }">
未成年!
</c:if>
6)c:choose 判断 相当于if elseif else
<c:choose>
<c:when test="${param.age<20}">
小于20...
</c:when>
<c:when test="${param.age>=20 && param.age<=100}">
20~100...
</c:when>
<c:otherwise>
大于100...
</c:otherwise>
</c:choose>
7)c:forEach 遍历
items:要被循环的信息
begin:开始的元素(0=第一个元素,1=第二个元素)
end:最后一个元素(0=第一个元素,1=第二个元素)
step:每一次的迭代的步长
var:代表当前条目的变量名称
varStatus:代表循环状态的变量名称,.count
表示迭代计数,从1开始;.index
从0开始。
i:遍历数组
<% String[] aa = {“1A”,“2A”,“3A”};
pageContext.setAttribute(“aa”, aa);
%>
<c:forEach var=“a” items="${aa}">
${a}
</c:forEach>
ii:遍历list:
<% List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
pageContext.setAttribute("list", list);
%>
<c:forEach items="${list}" var="s">
${s}<br/>
</c:forEach>