一、EL表达式(Expression language)
1.EL表达式的语法:
${表达式},例如: ${list}
注意:
自带响应功能
2.EL表达式的使用:
1.EL表达式获取请求数据
获取用户请求数据(请求实体)
${param.键名} 获取请求实体中一个键一个值的数据
${paramValues.键名} 获取请求实体中同键不同值的数据,返回的是String数组,可以使用角标直接获取
2.获取请求头数据
${header} 返回所有请求的数据,键值对形式
${header["键名"]} 返回指定的键的请求数据
${headerValues["键名"]}
3.获取Cookie数据
${Cookie} 获取所有的Cookie键值对 对象
${Cookie.Cookie对象的键名} 获取存储了指定Cookie数据的Cookie对象
${Cookie.Cookie对象的键名.name} 获取存储了指定Cookie数据的Cookie对象的存储的键
${Cookie.Cookie对象的键名.value} 获取存储了指定Cookie数据的Cookie对象的存储的值
3.EL表达式获取作用域数据
1.作用域对象: pageContext request session application
2.作用域数据:我们使用setAttribute方法存储的数据
3.获取:
普通的字符串数据:${键名}
对象数据:${键名.属性名}
EL表达式获取作用域对象数据
<br />
<%
User user = new User();
user.setUid(1);
user.setUname("zhangsan");
user.setAge(1);
user.setFav("看电影");
request.setAttribute("user", user);
%>
${user }<br />${user.uid}<br /> ${user.uname}<br />
获取对象属性的值${对象名.属性名 },本质调用了该属性的getter方法
集合数据:
list集合${键名[角标]}
<%
List list = new ArrayList();
list.add("list1");
list.add("list2");
request.setAttribute("list", list);
%>
${list}<br />
${list[0]}
list集合${键名[角标]}
Map集合${map集合作用域存储的键名.map集合存储的数据的键名}
4.作用域查找顺序,
pageContext
request
session
application
如果找到了则不再查找,如果找不到,则继续查找下一个作用域,如果四个都没有找到则什么都不表示
5.指定作用域的获取
${pageScope.键名} 指定了获取pageContext作用域中的数据
${requestScope.键名} 指定了获取requestContext作用域中的数据
${sessionScope.键名} 指定了获取sessionContext作用域中的数据
${applicationScope.键名} 指定了获取applicationContext作用域中的数据
<%
pageContext.setAttribute("str", "hello,pageContext");
request.setAttribute("str", "hello,requestContext");
session.setAttribute("str", "hello,sessionContext");
application.setAttribute("str", "hello,applicationContext");
%>
${str}<br/>
从pageContext中取值:${pageScope.str};<br/>
从requestContext中取值:${requestScope.str};<br/>
从sessionContext中取值:${sessionScope.str};<br/>
从applicationContext中取值:${applicationScope.str};<br/>>
4.EL表达式逻辑运算
1.算术运算:
+,-,*,/在EL表达式中可以直接进行算术运算
${算术表达式} 例如:${1+2}
注意:+表示算术运算,不能进行字符串连接
2.逻辑运算:&& ! ||
${逻辑表达式}
3.比较运算:== != > >= < <=
${比较表达式}
4.三目运算
${条件?值:值}
5.EL表达式的empty判断
${empty 键名}
作用:
判断该键是否有存储有效数据
二、JSTL标签库
1、JSTL学习
作用:
在jsp页面使用其可以非常方便的进行数据的处理。较与使用java代码块方法,更加简单,代码更加的简洁易读。
使用:
核心标签库
流程:
导入jar包
引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
内容:
基本标签
out标签:
<c:out value="${表达式}" default="默认值"></c:out>
作用:结合EL表达式将数据响应给浏览器 ,如果EL表达式没有收到数据则可以使用dafault属性声明默认值。
set标签:
<c:set value ="数据" var="键名" scope="作用域名"></c:set>
<%
int age=10;
request.setAttribute("age", age);
%>
等同于
<c:set value="10" var="gae" scope="request"></c:set>
作用:将数据存储到指定的作用域中,默认是pageContext作用域
注意:scope的值为 pag request session application
remove标签:
<c:remove var="要删除的键名" scope="作用域名"></c:remove>
作用:删除作用域中的数据,默认是删除四个作用域中符合要求的数据
注意:使用pageContext.removeAttriute("键名"), 此方法会将四个作用域中的符合要求的数据全部删除
使用pageContext.removeAttriute(String name,int scope)
指明要删除的作用域中的数据 scope的值为 1pageContext,2request ,3 session,4 application
使用request.removeAttibute("键名") 删除当前作用域符合要求的数据
使用session.removeAttibute("键名") 删除当前作用域符合要求的数据
使用application.removeAttibute("键名") 删除当前作用域符合要求的数据
逻辑标签:
单分支判断标签:<c:if test="${表达式}"数据></c:if>
作用:可以根据EL表达式进行一定程度的单分支逻辑判断式。
注意:test属性中书写的是EL表达式,或者说是EL表达式的逻辑表达式。
该标签只能进行EL表达式相关的逻辑判断。不能进行EL表达式不能获取的数据的逻辑处理
<c:set var="a" value="12"></c:set>
<c:if test="${a>8}">
<b>今天天气真好,适合学习2</b>
</c:if>
该标签只能进行EL表达式相关的逻辑判断。不能进行EL表达式不能获取的数据的逻辑处理
多分支判断标签:
<c:choose>
<c:when test="${表达式}"></c:when>
<c:when test="${表达式}"></c:when>
..
<c:otherwise></c:otherwise>
</c:choose>
实例:
<c:set value="80" var="score" scope="request"></c:set>
<c:choose>
<c:when test="${score>=90}">优秀</c:when>
<c:when test="${score>=80 }">良好</c:when>
<c:when test="${score>=70 }">一般</c:when>
<c:when test="${score>=60 }">及格</c:when>
<c:when test="${score<80 }">不及格</c:when>
</c:choose>
注意:符合条件后只会执行一个分支,其他分支不会执行。
循环标签:
<c:foreach>
循环体
</c:foreach>
实例:
<%
List<Employee> li = new ArrayList<Employee>();
li.add(new Employee(1001,"高琪",18,"程序员","30000","5000"));
li.add(new Employee(1002,"高小二",19,"讲师","25000","3000"));
li.add(new Employee(1003,"高小松",20,"教授","30000","3000"));
request.setAttribute("li", li);
%>
<c:forEach items="${li }" var="li" begin="0" end="1">
${li }<br/>
</c:forEach>
属性:
begin:声明循环的开始位置
end:声明循环的结束位置
step:声明循环的步长
varStatus:声明变量记录循环状态 ,例如变量名:i
注意:记录的数据存储到了作用域中可以直接使用El表达式进行获取
示例: ${i.index} 获取当次循环的下标
${i.count} 获取当次循环的次数
${i.first} 判断是否是第一次循环
${i.last} 判断是否是最后一次循环
items:声明要遍历的数据,可以是集合和数组等
注意:要使用EL表达式来获取
var:声明变量记录每次遍历的结果。可以做循环体中使用EL表达式获取遍历出来的数据