第九章 EL 表达式与 JSTL 标签库
创作日期:2021-12-28
9.1 EL 表达式简介
9.1.1 什么是 EL 表达式
EL 表达式的全称为:Expression Language 是表达式语言
9.1.2 EL 表达式的作用
EL 表达式主要代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出,因为 EL 表达式在输出数据的时候,要比 JSP 的表达式脚本更加简介
<%-- PrintHtml.jsp --%>
<body>
<%
request.setAttribute("key", "123");
%>
JSP 表达式脚本输出 key 的值为:<%= request.getAttribute("key")%><br>
EL 表达式输出 key 的值为:${key}
</body>
9.1.3 EL 表达式搜索域数据的顺序
EL 表达式主要是在 JSP 页面中输出数据,主要是输出域对象中的数据,当四个域对象中都有相同的 key 的数据的时候,EL 表达式会按照这四个域的范围由小到大的顺序进行搜索并输出,顺序为:pageContext 域,request 域,session 域 ,application 域
<%-- PrintHtml.jsp --%>
<body>
输出优先级为:pageContext 域,request 域,session 域 ,application 域
<%
pageContext.setAttribute("key", "123");
request.setAttribute("key", "123");
session.setAttribute("key", "123");
application.setAttribute("key", "123");
%>
</body>
9.1.4 EL表达式输出属性数据
EL 表达式支持输出 Bean 的普通属性,数组属性,List 集合属性,map 集合属性
演示:
创建测试类:
package com.jsp.text;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* @Description:测试类
* @author: XFDQ.lmq
* @create: 2022-08-11 18:01
*/
public class Person {
private String name;
private Integer[] Phones;
private List<String> citys;
private Map<String,Integer> results;
public Person() {
}
public Person(String name, Integer[] phones, List<String> citys, Map<String, Integer> results) {
this.name = name;
Phones = phones;
this.citys = citys;
this.results = results;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer[] getPhones() {
return Phones;
}
public void setPhones(Integer[] phones) {
Phones = phones;
}
public List<String> getCitys() {
return citys;
}
public void setCitys(List<String> citys) {
this.citys = citys;
}
public Map<String, Integer> getResults() {
return results;
}
public void setResults(Map<String, Integer> results) {
this.results = results;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", Phones=" + Arrays.toString(Phones) +
", citys=" + citys +
", results=" + results +
'}';
}
}
<%-- EL.jsp --%>
<body>
<%
LinkedList<String> cityLinkedList = new LinkedList<>();
cityLinkedList.add("China");
cityLinkedList.add("America");
cityLinkedList.add("Canada");
HashMap<String,Integer> resultsHashMap = new HashMap<>();
resultsHashMap.put("数学",92);
resultsHashMap.put("语文",98);
resultsHashMap.put("英语",90);
Person person = new Person();
person.setName("xfdq");
person.setPhones(new Integer[]{151,159});
person.setCitys(cityLinkedList);
person.setResults(resultsHashMap);
pageContext.setAttribute("person",person);
%>
输出Person:${person}<br>
输出Person的name属性:${person.name}<br>
输出Person的phones属性:${person.phones[0]}<br>
输出Person的citys属性:${person.citys[1]}<br>
输出Person的results属性:${person.results.get("数学")}分<br>
</body>
9.2 EL 表达式的运算
语法:${ 运算表达式 },EL 表达式支持如下运算符: