EL 表达式
一、什么是 EL 表达式,EL 表达式的作用?
EL 表达式的全称是:Expression Language。是表达式语言。
EL 表达式的作用:EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。
因为 EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很多。
示例如下:
页面效果:
此时,它们输出的格式好像没什么区别。如果输出的键(key)找不到,会是什么情况呢?
页面效果如下:
我们发现,当key找不到的时候,表达式脚本会输出null值,而EL表达式会输出空串。我们希望在页面上展示的是空串而不是null值(用户是不知道null的意思的)。
表达式脚本怎样才能输出空串呢?
页面效果如下:
从上面的结果来看,表达式脚本输出空串是一件非常繁琐的事情。
EL表达式的格式:
${表达式}
二、EL 表达式搜索域数据的顺序
EL 表达式主要是在 jsp 页面中输出数据。
主要是输出域对象中的数据。
当四个域中都有相同的 key 的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。
页面效果如下:
三、EL 表达式输出 Bean 的普通属性,数组属性。List 集合属性,map 集合属性
3.1、输出Bean的普通属性
JavaBean如下:
EL表达式如下:
效果如下:
3.2、输出Bean的数组属性
EL表达式如下:
页面效果如下:
3.3、输出Bean的List集合属性
EL表达式如下:
页面效果如下:
3.4、输出Bean的Map集合属性
EL表达式如下:
页面效果如下:
我们在Person类中添加一个getAge()方法(不用添加age属性):
EL表达式如下:
页面效果如下:
总结:使用EL表达式输出Bean的属性时,起决定性因素的是Bean中的getXxx(),而不是具体的某个属性。就算没有这个属性,只要有对应的getXxx()方法,也可以达到同样的输出效果。
四、EL 表达式——运算
4.1、关系运算
示例:
效果:
4.2、逻辑运算
示例:
效果:
4.3、算数运算
示例:
效果:
4.4、empty运算
empty 运算可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false。
以下几种情况为空:
1、值为 null 值的时候,为空
2、值为空串的时候,为空
3、值是 Object 类型数组,长度为零的时候
4、list 集合,元素个数为零
5、map 集合,元素个数为零
示例:
<body> <% //1.值为null的时候,为空 request.setAttribute("emptyNull", null); //2.值为空串的时候,为空 request.setAttribute("emptyStr", ""); //3.值是Object类型的数组,长度为0的时候,为空 request.setAttribute("emptyArr", new Object[]{}); //4.List集合,元素个数为0 List<String> list = new ArrayList<>(); // list.add("abc"); request.setAttribute("emptyList", list); //5.Map集合,元素个数为0 Map<String, Object> map = new HashMap<>(); // map.put("key", "value"); request.setAttribute("emptyMap", map); %> ${ empty emptyNull } <br/> ${ empty emptyStr } <br/> ${ empty emptyArr } <br/> ${ empty emptyList } <br/> ${ empty emptyMap } </body>
效果:
4.5、三元运算
表达式 1?表达式 2:表达式 3
如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3 的值。
示例:
效果:
4.6、“.”点运算 和 [] 中括号运算符
① .点运算,可以输出 Bean 对象中某个属性的值。

效果:
② []中括号运算,可以输出有序集合中某个元素的值。
示例:

效果:
③ 并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。
示例:
效果:
五、EL 表达式的 11 个隐含对象
EL 表达式中的11 个隐含对象,是 EL 表达式中自己定义的,可以直接使用。
5.1、EL 获取四个特定域中的属性
示例:
效果:
当4个域中有重复的键的时候:
效果:
如果我们要输出其它的域中的数据,怎么输出呢?
示例:
效果:
5.2、pageContext 对象的使用
request.getScheme() :它可以获取请求的协议
request.getServerName() :获取请求的服务器 ip 或域名
request.getServerPort() :获取请求的服务器端口号
getContextPath() :获取当前工程路径
request.getMethod() :获取请求的方式(GET 或 POST)
request.getRemoteHost() :获取客户端的 ip 地址
session.getId() :获取会话的唯一标识
示例:
效果:
示例:
效果:
5.3、EL 表达式其他隐含对象的使用
示例:
效果:
示例:
效果:
示例:
效果:
示例:
效果: