EL 表达式 & JSTL 标签库
一、EL 表达式
1、什么是 EL 表达式,EL 表达式的作用?
EL 表达式的全称:Expression Language,是表达式语言。
EL 表达式的什么作用:
EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。 因为 EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很多。
<html>
<body>
<% request.setAttribute("key","值"); %>
表达式脚本输出 key 的值是:
<%=request.getAttribute("key1")==null?"":request.getAttribute("key1")%>
<br/>
EL 表达式输出 key 的值是:${key1}
</body>
</html>
EL 表达式的格式:${表达式}
EL 表达式在输出 null 值的时候,输出的是空串。jsp 表达式脚本输出 null 值的时候,输出的是 null 字符串。
2、EL 表达式搜索域数据的顺序
EL 表达式主要是在 jsp 页面中输出数据,主要是输出域对象中的数据。
当四个域中都有相同的 key 的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。
<html>
<body>
<%
request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
pageContext.setAttribute("key", "pageContext");
%>
${ key }
</body>
</html>
3、EL 表达式输出 Bean 的普通属性,数组属性,List 集合属性,map 集合属性
public class Person {
private String name;
private String[] phones;
private List<String> cities;
private Map<String,Object> map;
public int getAge() {
return 18;
}
}
<html>
<body>
<%
Person person = new Person();
person.setName("张三");
person.setPhones(new String[]{"18888888888","18888888889","18888888886"});
List<String> cities = new ArrayList<String>();
cities.add("北京");
cities.add("上海");
cities.add("成都");
person.setCities(cities);
Map<String,Object> map = new HashMap<>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
person.setMap(map);
pageContext.setAttribute("p", person);
%>
输出 Person:${ p }<br/>
输出 Person 的 name 属性:${p.name} <br>
输出 Person 的 pnones 数组属性值:${p.phones[1]} <br>
输出 Person 的 cities 集合中的元素值:${p.cities} <br>
输出 Person 的 List 集合中某个元素值:${p.cities[1]} <br>
输出 Person 的 Map 集合: ${p.map} <br>
输出 Person 的 Map 集合中某个 key 的值: ${p.map.key2} <br>
输出 Person 的 age 属性:${p.age} <br>
</body>
</html>
4、EL 表达式——运算
语法:${ 运算表达式 } , EL 表达式支持如下运算符:
1)关系运算
eq 或 == 运算符: 等于
ne 或 != 运算符: 不等于
lt 或 < 运算符:小于
gt 或 > 运算符:大于
le 或 <= 运算符:小于等于
ge 或 >= 运算符:大于等于
2)逻辑运算
&& 或 and 运算符:与运算
|| 或 or 运算符:或运算
! 或 not 运算符:取反运算
3)算数运算
“ + ” 运算符:加法
“ - ” 运算符:减法
“ * ” 运算符:乘法
/ 或 div 运算符:除法
% 或 mod 运算符:取模
4)empty 运算
empty 运算可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false。
以下几种情况为空:
1、值为 null 值的时候,为空
2、值为空串的时候,为空
3、值是 Object 类型数组,长度为零的时候
4、list 集合,元素个数为零
5、map 集合,元素个数为零
5)三元运算
表达式 1 ?表达式 2 :表达式 3
如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3 的值。
${ 12 != 12 ? "12不等于12":"12等于12" }
6)“ . ”点运算 和 [] 中括号运算符
“ . ”点运算,可以输出 Bean 对象中某个属性的值。
[] 中括号运算,可以输出有序集合中某个元素的值, 并且 [] 中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。
5、EL 表达式的 11 个隐含对象
EL 个达式中 11 个隐含对象,是 EL 表达式中自己定义的,可以直接使用。
pageContext
PageContextImpl 它可以获取 jsp 中的九大内置对象
pageScope
Map<String,Object> 它可以获取 pageContext 域中的数据
requestScope
Map<String,Object> 它可以获取 Request 域中的数据
sessionScope
Map<String,Object> 它可以获取 Session 域中的数据
applicationScope
Map<String,Object> 它可以获取 ServletContext 域中的数据
param
Map<String,String> 它可以获取请求参数的值
paramValues
Map<String,String[]> 它也可以获取请求参数的值,获取多个值的时候使用
header
Map<String,String> 它可以获取请求头的信息
headerValues
Map<String,String[]> 它可以获取请求头的信息,它可以获取多个值的情况
cookie
Map<String,Cookie> 它可以获取当前请求的 Cookie 信息
initParam
Map<String,String> 它可以获取在 web.xml 中配置的上下文参数
1)EL 获取四个特定域中的属性
pageScope ====== pageContext 域
requestScope ====== Request 域
sessionScope ====== Session 域
applicationScope ====== ServletContext 域
2)pageContext 对象的使用
<html>
<body>
<%
pageContext.setAttribute("req", request);
%>
<%=request.getScheme() %> <br>
1.协议: ${ req.scheme }<br>
2.服务器 ip:${ pageContext.request.serverName }<br>
3.服务器端口:${ pageContext.request.serverPort }<br>
4.获取工程路径:${ pageContext.request.contextPath }<br>
5.获取请求方法:${ pageContext.request.method }<br>
6.获取客户端 ip 地址:${ pageContext.request.remoteHost }<br>
7.获取会话的 id 编号:${ pageContext.session.id }<br>
</body>
</html>
3)EL 表达式其他隐含对象的使用
param
Map<String,String> 它可以获取请求参数的值
paramValues
Map<String,String[]> 它也可以获取请求参数的值,获取多个值的时候使用
header
Map<String,String> 它可以获取请求头的信息
headerValues
Map<String,String[]> 它可以获取请求头的信息,它可以获取多个值的情况
cookie
Map<String,Cookie> 它可以获取当前请求的 Cookie 信息
initParam
Map<String,String> 它可以获取在 web.xml 中配置的上下文参数
二、JSTL 标签库
JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签库,是一个不断完善的开放源代码的 JSP 标签库。
EL 表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个 jsp 页面变得更佳简洁。
在 jsp 标签库中使用 taglib 指令引入标签库
CORE 标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
XML 标签库
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
FMT 标签库
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
SQL 标签库
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
FUNCTIONS 标签库
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
1、JSTL 标签库的使用步骤
1、先导入 jstl 标签库的 jar 包。
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar
2、第二步,使用 taglib 指令引入标签库。
2、core 核心库使用
<c:set />
作用:set 标签可以往域中保存数据
<c:if />
作用:if 标签用来做 if 判断
<c:choose> <c:when> <c:otherwise>
作用:多路判断,跟 switch … case … default 非常接近
<c:forEach />
作用:遍历输出使用