<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
request.setAttribute("key", "值");
%>
表达式脚本输出key的值是:<%=request.getAttribute("key")%>
EL表达式输出key的值是:${key}
这样输出的结果相同EL表达式在输出null值(比如key1)的时候,输出的是空串;jsp表达式脚本输出null值的时候,输出的是null字符串
EL表达式搜索四个域的顺序
EL表达式主要是在jsp页面中输出数据
主要是输出域对象中的数据
session中的数据浏览器关闭后才会消失,所以哪怕注释session后然后刷新页面,还是会输出session当四个域中都有相同的key的数据的时候,EL表达式会根据四个域的从小到大的顺序去进行搜索,找到就输出 EL表达式输出复杂的Bean对象
package com.atguigu.pojo;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class Person {
private String name;
private String[] phones;
private List cities;
private Map map;
@Override
public String toString() {
return "Person{" +
"name='" + name + ''' +
", phones=" + Arrays.toString(phones) +
", cities=" + cities +
", map=" + map +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String[] getPhones() {
return phones;
}
public void setPhones(String[] phones) {
this.phones = phones;
}
public List getCities() {
return cities;
}
public void setCities(List cities) {
this.cities = cities;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public Person(String name, String[] phones, List cities, Map map) {
this.name = name;
this.phones = phones;
this.cities = cities;
this.map = map;
}
public Person() {
}
}
<%@ page import="com.atguigu.pojo.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
Person person = new Person();
person.setName("name111");
person.setPhones(new String[]{"123", "456", "789"});
List cities = new ArrayList();
cities.add("beijin");
cities.add("shanghai");
cities.add("shenzheng");
person.setCities(cities);
Map map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
person.setMap(map);
pageContext.setAttribute("key_person", person);
%>
${ key_person }
<%@ page import="com.atguigu.pojo.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
Person person = new Person();
person.setName("name111");
person.setPhones(new String[]{"123", "456", "789"});
List cities = new ArrayList();
cities.add("beijin");
cities.add("shanghai");
cities.add("shenzheng");
person.setCities(cities);
Map map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
person.setMap(map);
pageContext.setAttribute("key_person", person);
%>
${ key_person }
${ key_person.name }
${ key_person.phones }
${ key_person.phones[1] }
${ key_person.cities }
${ key_person.cities[1] }
${ key_person.map }
${key_person.map[key2]}
注意EL表达式是不需要引入jstl.jar的注意到输出map是输出花括号包裹的键值对;输出List得到的是由[]包裹起来的;输出数组得到的是首地址通过实验,我们注意到 :EL表达式中,找的不是这个属性,而是找这个属性所对应的get方法 关系运算
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
${12 == 12} 或 ${12 eq 12}
逻辑运算
算术运算
empty运算
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
// 1、值为null值的时候,为空
request.setAttribute("key1", null); // true
request.setAttribute("key2", new Object()); // false ,非空!
// 2、值为空串的时候,为空
request.setAttribute("key3", ""); // true
request.setAttribute("key4", " "); // false
// 3、值是Object类型数组,长度为零时为空
request.setAttribute("key5", new Object[]{}); // true
request.setAttribute("key6", new Object[]{"12"}); // false
// 4、list集合,元素个数为零
List list = new ArrayList<>();
request.setAttribute("key7", list); // true
// 5、map集合,元素个数为零
Map map = new HashMap();
request.setAttribute("key8", , map); // true
%>
${ empty key1 }
三元运算
${ 12 == 12 ? "123" : "456" }
.点运算,可以输出bean对象中某个属性的值
[]中括号运算,可以输出有序集合中某个元素的值
并且中括号运算还可以输出map集合中 key 里含有特殊字符的key的值(比如. 和 逻辑运算符)
不要忘了引号,单引号或者双引号都可以 11个EL隐含对象
pageScope、requestScope、sessionScope、applicationScope演示之前直接 ${ key1 } 是按四个域从小到大的顺序去搜索的如果使用比如 ${ applicationScope.key1 } 我们就可以选择性地去搜索了 pageContext演示



