EL表达式介绍
- EL(Expression Language):表达式语言
- 在 JSP 2.0 规范中加入的内容,也是 Servlet 规范的一部分
- 作用:在 JSP 页面中获取数据。让我们的 JSP 脱离 java 代码块和 JSP 表达式
- 语法:
${ 表达式内容 }
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式快速入门</title>
</head>
<body>
<%--1.向域对象中添加数据--%>
<% request.setAttribute("username","zhangsan"); %>
<%--2.获取数据--%>
Java代码块:<% out.println(request.getAttribute("username")); %> <br>
JSP表达式:<%= request.getAttribute("username")%> <br>
EL表达式:${username}
</body>
</html>
EL表达式的注意事项
- EL 表达式没有空指针异常
- EL 表达式没有索引越界异常
- EL 表达式没有字符串的拼接
EL表达式的运算符
-
关系运算符
运算符 作用 示例 结果 == 或 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 并且 ${A && B} 或 ${A and B} true/false || 或 or 或者 ${A || B} 或 ${A and B} true/false ! 或 not 取反 ${ !A } 或 ${ not A } true/false -
其他运算符
运算符 作用 empty 1.判断对象是否为null
2.判断字符串是否为空字符串
3.判断容器元素是否为0条件 ? 表达式1 : 表达式2 三元运算符 - 容器元素是否为0,就是容器的长度是否为0(其实就是检查容器是否为空)
EL表达式使用细节
-
EL 表达式能够获取四大域对象的数据,根据名称从小到大在域对象中查找
-
还可以获取 JSP 其他八个隐式对象,并调用对象中的方法
<%--获取四大域对象中的数据--%> <% //pageContext.setAttribute("username","zhangsan"); request.setAttribute("username","zhangsan"); //session.setAttribute("username","zhangsan"); //application.setAttribute("username","zhangsan"); %> ${username} <br> <%--获取JSP中其他八个隐式对象 获取虚拟目录名称--%> <%= request.getContextPath()%> ${pageContext.request.contextPath}
EL表达式的11个隐式对象
EL表达式也为我们提供隐式对象,可以让我们不声明直接来使用,十一个对象见下表,需要注意的是,它和JSP的隐式对象不是一回事:
EL中的隐式对象 | 类型 | 对应JSP隐式对象 | 备注 |
---|---|---|---|
PageContext | Javax.serlvet.jsp.PageContext | PageContext | 完全一样 |
ApplicationScope | Java.util.Map | 没有 | 操作应用域对象数据 |
SessionScope | Java.util.Map | 没有 | 操作会话域对象数据 |
RequestScope | Java.util.Map | 没有 | 操作请求域对象数据 |
PageScope | Java.util.Map | 没有 | 操作页面域对象数据 |
Header | Java.util.Map | 没有 | 根据key获取请求消息头,值是一个 |
HeaderValues | Java.util.Map | 没有 | 根据key获取请求消息头,值是多个(数组) |
Param | Java.util.Map | 没有 | 根据key获取请求参数,值是一个 |
ParamValues | Java.util.Map | 没有 | 根据key获取请求参数,值是多个(数组) |
InitParam | Java.util.Map | 没有 | 根据key获取全局参数,value是参数值 |
Cookie | Java.util.Map | 没有 | 根据key获取cookie的值 |
JSTL的介绍
-
JSTL(Java Server Pages Standarded Tag Library):JSP 标准标签库
-
主要提供给开发人员一个标准通用的标签库
-
开发人员可以利用这些标签取代 JSP 页面上的 Java 代码,从而提高程序的可读性,降低程序的维护难度
-
它由以下5个部分组成:
组成 作用 说明 core 核心标签库 通用的逻辑处理 fmt 国际化 不同地域显示不同语言 functions EL函数 EL表达式可以使用的方法 sql 操作数据库 用于操作数据库 xml 操作XML 用于操作XML
核心标签库
1)核心库介绍
实际开发中,用到的jstl标签库主要以核心标签库为准,偶尔会用到国际化标签库的标签。下表中把我们经常可能用到的标签列在此处。
标签名称 | 功能分类 | 分类 | 作用 |
---|---|---|---|
<c:if> | 流程控制 | 核心标签库 | 用于判断 |
<c:choose>,<c:when>,<c:otherwise> | 流程控制 | 核心标签库 | 用于多个条件判断 |
<c:foreache> | 迭代操作 | 核心标签库 | 用于循环遍历 |
-
案例
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!--prefix给jstl core核心库起个前缀名,使用的标签就以c开头--> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>流程控制</title> </head> <body> <%--向域对象中添加成绩数据--%> ${pageContext.setAttribute("score","T")} <%--对成绩进行判断--%> <c:if test="${score eq 'A'}"> 优秀 </c:if> <%--对成绩进行多条件判断--%> <c:choose> <c:when test="${score eq 'A'}">优秀</c:when> <c:when test="${score eq 'B'}">良好</c:when> <c:when test="${score eq 'C'}">及格</c:when> <c:when test="${score eq 'D'}">较差</c:when> <c:otherwise>成绩非法</c:otherwise> </c:choose> <%--向域对象中添加集合--%> <% ArrayList<String> list = new ArrayList<>(); list.add("aa"); list.add("bb"); list.add("cc"); list.add("dd"); pageContext.setAttribute("list",list); %> <%--遍历集合--%> <c:forEach items="${list}" var="str"> ${str} <br> </c:forEach> </body> </html>