一.El表达式
1.El概述
Expression Language:表达式语言,jsp2.0之后内置在jsp里面
目的:为了使JSP写起来更加简单。(代替脚本 <% %>)
2. .EL语法
${el表达式}
3.EL表达式的用途
1.获取数据. 获取的是域对象中存储的数据
2.EL执行运算
4.获取简单数据类型数据
语法:${requestScope|sessionScope|applicationScope.属性名};
快捷写法:${属性名}, 属性名就是存在域对象里面的key
<body>
<%
request.setAttribute("rKey","rrr");
session.setAttribute("sKey","sss");
/*application就是Servlet里面的ServletContext*/
application.setAttribute("aKey","aaa");
%>
获得request里面存的数据:<br/>
老方式:<%=request.getAttribute("rKey")%><br/>
el方式: ${requestScope.rKey}<br/>
<hr/>
获得session里面存的数据:<br/>
老方式:<%=session.getAttribute("sKey")%><br/>
el方式: ${sessionScope.sKey}<br/>
<hr/>
获得application里面存的数据:<br/>
老方式:<%=application.getAttribute("aKey")%><br/>
el方式:${applicationScope.aKey}
<hr/>
简单方式的写法:<br/>
<%--${rKey}: 依次的从最小的域往最大的域找,能找到就返回--%>
获得request里面的数据:${rKey}<br/>
获得session里面的数据:${sKey}<br/>
获得servletContext里面的数据:${aKey}<br/>
</body>
5.获取数组
语法:${数组属性名[index]};
数组属性名就是存入域对象里面的key
6. 获取list
语法:${list属性名[index]}或者${list属性名.get(index)};
list属性名就是存入域对象里面的key
7. 获取Map
语法:${map属性名.键}或者${map属性名.get("键")
map属性名就是存入域对象里面的key
<%
String[] array = {"aaa","bbb","ccc"};
request.setAttribute("a",array);
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
session.setAttribute("l",list);
Map<String,String> map = new HashMap<String,String>();
map.put("akey","aaa");
map.put("bkey","bbb");
map.put("ckey","ccc");
request.setAttribute("m",map);
%>
获得数组里面的第2个值:<br/>
老方式:<%=((String[])request.getAttribute("a"))[1]%><br/>
el方式: ${a[1]} <br/>
<hr/>
获得list里面的第1个值:<br/>
老方式:<%=((List<String>)session.getAttribute("l")).get(0)%><br/>
el方式: ${l[0]} <br/>
<hr/>
获得map里面的akey对应值:<br/>
老方式:<%=((Map<String,String>)request.getAttribute("m")).get("akey")%><br/>
el方式:${m.akey} <br/>
8.获取bean
语法:${bean的属性名(也就是存入的key值).javabean属性}
依赖getxxx()方法; eg: getPassword()---去掉get-->Password()----首字母小写--->password
<%
User user = new User("zs", "123456", 18);
request.setAttribute("u",user);
%>
获得密码:<br/>
老方式:<%=((User)request.getAttribute("u")).getPassword()%><br/>
el方式:${u.password} <br/>
<hr/>
[ ]和.方式的区别
只要是能用.的都可以使用[]
带下标(数组,list)要用[]
有特殊字符的要用[]
- 获取的是三个域范围的值,存入三个域中
- 能获取到则获取,获取不到返回" "字符串 ,不是返回null
- ${域中属性名}:依次从requestScope|sessionScope|applicationScope中查找指定的属性
若找到,立即返回,且结束该次查找
若找不到返回"" - 若属性名中出现了".""+""-"等特殊的符号的时候,快捷获取的方式不好使,必须使用以下方式:
${xxxScope[“属性名”]}
特殊情况:
<%
request.setAttribute("a.b.c.d","rrr");
Map<String,String> map = new HashMap<String,String>();
map.put("a.akey","aaa");
map.put("bkey","bbb");
map.put("ckey","ccc");
request.setAttribute("m",map);
%>
${a.b.c.d}
${requestScope['a.b.c.d']}<br/>
#{m['a.akey']}
<br/>
9.EL执行运算
算数运算
+,-,*,/
+不能拼接字符串.
逻辑运算
< >= <= != ==
关系运算
&& || !
非空判断
empty,判断一个对象是否为null,判断集合长度是否为0, 判断一个字符串是否为""
not empty
语法: ${empyt 属性名};属性名 就是域对象里面的key值
<body>
<%
//request.setAttribute("a",10);
User user = null;
request.setAttribute("u",user);
User user1 = new User();
request.setAttribute("u1",user1);
List list = new ArrayList();
request.setAttribute("l",list);
List list02 = null;
request.setAttribute("l2",list02);
%>
<%--a就是从域里面获得的a
${a+19}
${a>20}
--%>
<%--1.判断对象(user是)否为null--%>
${empty u} <%--true--%>
${empty u1} <%--false--%>
${not empty u}<%--false--%>
<hr/>
<%--2.判断一个集合的长度是否为0--%>
${empty l} <%--true--%>
${empty l2} <%--true--%>
</body>
二.JSTL标签库
1.JSTL概述
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的
目的: 为了简化在jsp页面上展示数据 遍历数据 判断数据
2.JSTL五大标签库
2.1 核心标签库
- 导入jar包
- 在页面上导入核心标签库 <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
1. if标签
- 语法
<c:if test="el表达式${..}" [var="给之前的表达式的结果起个名字"] [scope="将结果保存在那个域中 默认page"]>
</c:if>
<%request.setAttribute("a", 3); %>
<c:if test="${a>1}" var="i" scope="page">
a大于1
</c:if>
<c:if test="${a<=1}">
a不大于1
</c:if>
${i }
- choose标签
<%
request.setAttribute("a","前端");
%>
<c:choose>
<c:when test="${a=='java'}">
java
</c:when>
<c:when test="${a=='Android'}">
Android
</c:when>
<c:when test="${a=='ios'}">
ios
</c:when>
<a:otherwise>
其他
</a:otherwise>
</c:choose>
- foreach标签
<body>
<h1>老方式,脚本</h1>
<%
for (int i = 0; i < 10; i++) {
out.print(i);
%>
<hr/>
<%
}
%>
<h1>基本使用</h1>
<c:forEach var="i" begin="2" end="10" step="2">
${i}
<hr/>
</c:forEach>
<%--<h1>复杂的使用</h1>--%>
<c:forEach items="${list}" var="n">
${n}
</c:forEach>
<h1>forEach练习</h1>
<table width="500px" border="1px">
<tr>
<td>索引</td>
<td>第几个</td>
<td>值</td>
<td>是否是第一个</td>
<td>是否是最后一个</td>
</tr>
<c:forEach items="${list}" var="x" varStatus="vs">
<tr>
<td>${vs.index}</td>
<td>${vs.count}</td>
<td>${x}</td>
<td>${vs.first}</td>
<td>${vs.last}</td>
</tr>
</c:forEach>
</table>
</body>