什么是EL表达式
Expression Language(表达式语言)
EL的功能
替代JSP页面中访问数据时的复杂编码
执行表达式
EL的特点
自动转换类型
使用简单
EL表达式搜索域数据的顺序
El表达式主要是在jsp页面中输出数据。
主要是输出域对象中的数据
当四个域中都有相同的key的数据时,EL表达式或按照四个域的从小到大的顺序进行搜索,找到输出
<body>
<%
pageContext.setAttribute("key","pageContext");
request.setAttribute("key","request");
session.setAttribute("key","session");
application.setAttribute("key","application");
%>
<h3>EL表达式输出key的值是:${key}</h3>
</body>
EL表达式session、List、循环取值
Servlet文件代码
@WebServlet("/test")
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Dog> list=new ArrayList<>();
Dog d=new Dog();
d.setId(1);
d.setName("小黄");
Dog d1=new Dog();
d1.setId(1);
d1.setName("小白");
list.add(d);
list.add(d1);
req.setAttribute("list",list);
req.getSession().setAttribute("d",d);
req.setAttribute("a",10);
req.getSession().setAttribute("b",20);
req.getSession().setAttribute("flag","<a href='#'>哈哈哈</a>");
req.getRequestDispatcher("index.jsp").forward(req,resp);
}
}
JSP文件代码
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<!--1.美刀符+花括号用于从作用域中取值
2.可以直接通过.获取对象值,对象不能没有set/get方法,通过.实际上就是调用了方法的set/get方法
3.取值如果同名的话从四大作用域从小到大的顺序取出,要是没有此变量显示空串
-->
${requestScope.a}<br/>
${sessionScope.b}<br/>
${sessionScope.d.id}<br/>
${sessionScope.d.name}
<!--List只想要其中某个的值可以直接通过下标获取-->
<!--循环必备条件var对象名 items对象-->
<table border="2">
<c:forEach var="ob" items="${list}">
<tr>
<td>${ob.id}</td>
<td>${ob.name}</td>
</tr>
</c:forEach>
</table>
<c:set var="flag" value="千夫人" scope="session"></c:set>
<c:out value="${flag}">
</c:out>
</body>
</html>
结果:
EL表达式语法
属性范围 |
EL表达式中的名称 |
属性范围 |
EL表达式中的名称 |
page |
pageScope |
session |
sessionScope |
request |
requestScope |
application |
applicationScope |
算术运算符
算术运算符 |
说明 |
示例 |
结果 |
+ |
加 |
${10+5} |
15 |
- |
减 |
${10-5} |
5 |
* |
乘 |
${10*5} |
50 |
/ 或 div |
除 |
${10/5}或${10 div 5} |
2 |
% 或 mod |
取模 |
${10%5}或${10 mod 5} |
0 |
关系运算符
算数运算符 |
说明 |
示例 |
结果 |
== 或eq |
等于 |
${23==5}或${23 eq 5} ${"a" =="a"}或${"a" eq "a"} |
false true |
!= 或ne |
不等于 |
${23!=5}或${23 ne 5} |
true |
< 或lt |
小于 |
${23<5}或${23 lt 5} |
false |
> 或gt |
大于 |
${23>5}或${23 gt 5} |
true |
<= 或le |
小于等于 |
${23<=5}或${23 le 5} |
false |
>= 或ge |
大于等于 |
${23>=5}或${23 ge 5} |
true |
逻辑运算符和Empty运算符
算数运算符 |
说明 |
示例 |
结果 |
&& 或and |
逻辑与 |
如果A为true,B为false,则${A && B}或${A and B} |
false |
|| 或or |
逻辑或 |
如果A为true,B为false,则${A || B}或${A or B} |
true |
! 或not |
逻辑非 |
如果A为true,则${!A}或${not A} |
false |
Empty运算符
Empty运算符是一个前缀操作符,用于检测一个变量是否为空Empty运算符,如果为空输出true,不为空输出false
以下几种情况为空
1. 值为null的时候
2. 值为字符串的时候
3. 值是Object类型数组,长度为零的时候
4. list集合,元素个数为零
5. map集合,元素个数为零
<% request.setAttribute("username","张明"); %>
${empty username} // 返回 false
${not empty username} // 返回 true
${! empty username} // 返回 true
什么是JSTL
JSP标准标签库(JSP Standard Tag Library)
包含一组开发JSP页面时常见功能的标准标签
优点
①不用嵌入Java代码就可以实现JSP页面逻辑控制
②配合EL表达式,方便的实现JSP页面编码
③代码简洁
<c:remove var="<string>" scope="<string>"/>
var:待移除的变量名
scope:变量所在作用域
引入JSTL
语法:
<c:标签名>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
uri:指定要引入的标签库
prefix:为引入的标签库指定别名,核心标签库一般使用“c”
通用标签库-remove标签
用于移除指定作用域内的指定变量
<c:remove var="<string>" scope="<string>"/>
var:待移除的变量名
scope:变量所在作用域
条件标签库-choose标签
<c:choose var="varName" scope="scope">
//test表达式条件满足时执行标签内的主体内容
<c:when test="condition1">
主体内容
</c:when>
……
<c:otherwise>
//所有when标签均不满足时执行otherwise标签内容
主体内容
</c:otherwise>
</c:choose>
when标签可以有多个
otherwise标签必须是choose标签中的最后一个标签
迭代标签库forEach标签
<c:forEach var="varName" varStatus="varStatusName"
begin="beginIndex" end="endIndex" step="step">
主体内容
</c:forEach>
var :循环过程中,当前元素的引用
varStatus :存放var属性引用元素的相关信息,如索引等
begin :循环的开始位置
end :循环的结束位置
step :循环的步长,可省略,默认为1
JSTL标签库常用标签
疏导图