1.EL表达式
【尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版-哔哩哔哩】https://b23.tv/1kEshd
a) 什么是EL表达式,EL表达式的作用?
EL表达式的全称是:Exressin Language.是表达式语言。
EL表达式的什么作用:EL表达式主要是代替jsp页面中的表达式脚本在js页面中进行数据的输出。 因为E表达式在输出数据的时候,要比jsp的表达式脚本要简洁很多。
演示:
新建模块09_EL_JSTL,add web ,
建Tomcat实例,
在Web-INF/lib下导入servlet.jar包和jsp.jar包 为模块服务
在web下创建a.jsp
a.jsp
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/17 Time: 下午 12:09 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% request.setAttribute("key","值");//加入servlet.jar包 %> 表达式脚本输出key的是:<%=request.getAttribute("key")%><br/><%-- key1--->null--%> 表达式脚本输出key的是:<%=request.getAttribute("key1")==null?"":request.getAttribute("key1")%><br/> EL表达式输出key的值是:${key} EL表达式输出key的值是:${key1}<%-- key1---> --%> </body> </html>
EL表达式的格式是:${表达式}
E表达式在输出null值的时候,输出的是空串。
jsp表达式脚本输出nul值的时候,输出的是null字符串。
b)EL表达式搜索域数据的顺序 EL表达式主要是在jsp页面中输出数据。
主要是输出域对象中的数据。
当四个域中都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。
b.jsp
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/17 Time: 下午 12:28 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% //往四个域中保存了相同的key的数据 request.setAttribute("key","request");//导入jsp.jar包 session.setAttribute("key","session"); application.setAttribute("key","application"); pageContext.setAttribute("key","pageContext"); %> ${key}<%--pageContext依次注掉pageContext-->request-->session(注掉还要session之后关闭浏览器)-->application(注掉还要application之后重启或重新部署服务器),会依次输出request-->session-->application-->空串--%> </body> </html>
c)EL表达式输出Bean的普通属性,数组属性。List集 合属性,map集合属性
i.需求一输出Person类中普通属性,数组属性。list集合属性和map集合属性。
在scr/com.pojo新建Person类
Person
package com.pojo; import java.util.Arrays; import java.util.List; import java.util.Map; public class Person { private String name; private String[] phones; private List<String> cities; private Map<String,Object> map; // private int age=18; public int getAge() { return 18; } public Person() { } public Person(String name, String[] phones, List<String> cities, Map<String, Object> map) { this.name = name; this.phones = phones; this.cities = cities; this.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<String> getCities() { return cities; } public void setCities(List<String> cities) { this.cities = cities; } public Map<String, Object> getMap() { return map; } public void setMap(Map<String, Object> map) { this.map = map; } @Override public String toString() { return "Person{" + "name=" + name + ", phones=" + Arrays.toString(phones) + ", cities=" + cities + ", map=" + map + '}'; } }
c.jsp
<%@ page import="com.pojo.Person" %> <%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %><%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/17 Time: 下午 12:48 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% Person person=new Person(); person.setName("我好帅"); person.setPhones(new String[]{"18610541354","18688886666","18699998888"}); List<String> cites= new ArrayList<>(); cites.add("北京"); cites.add("上海"); cites.add("深圳"); person.setCities(cites); 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的phones数组元素值:${p.phones[2]}<br/> 输出Person的cities集合中的元素值:${p.cities}<br/> 输出Person的list集合中的个别元素值:${p.cities[2]}<br/> 输出Person的map集合:${p.map}<br/> 输出Person的map集合中某个key的值:${p.map.key3}<br/> 输出Person的age属性:${p.age}<br/><%--如果没有age属性,有其getAge方法,还是可以输出18--%> </body> </html>
d)EL 表达式——运算
语法:$运算表达式}, EL表达式支持如下运算符:
1)关系运算
2)逻辑运算
3)算数运算
d.jsp
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/17 Time: 下午 01:12 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${12 == 12}或${12 eq 12}<br/> ${12 != 12}或${12 ne 12}<br/> ${12 < 12}或${12 lt 12}<br/> ${12 > 12}或${12 gt 12}<br/> ${12 <= 12}或${12 le 12}<br/> ${12 >= 12}或${12 ge 12}<br/> <hr/> ${12 == 12 && 12 > 11} 或 ${12 == 12 and 12 > 11}<br/> ${12 == 12 || 12 > 11} 或 ${12 == 12 or 12 > 11}<br/> ${ ! true } 或 ${not true}<br/> <hr/> ${12 + 12}<br/> ${12 - 12}<br/> ${12 * 12}<br/> ${18 / 12} 或 ${18 div 12}<br/> ${18 % 12} 或 ${18 mod 12}<br/> </body> </html>
i.empty运算
empty运算可以判断一个数据是否为空,如果为空,则输出true,不为空输出false。
以下几种情况为空:
1、值为null值的时候,为空
2、值为空串的时候,为空
3、值是object类型数组,长度为零的时候
4、list集合,元素个数为零
5、map集合,元素个数为零
ii.三元运算
表达式1?表达式2:表达式3
如果表达式1的值为真,返回表达式2的值,如果表达式1的值为假,返回表达式3的值。
e.jsp
<%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %><%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/17 Time: 下午 01:21 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% // 1、值为null值的时候,为空 request.setAttribute("emptyNull",null); // 2、值为空串的时候,为空 request.setAttribute("emptyString",""); // 3、值是object类型数组,长度为零的时候 request.setAttribute("emptyArray",new Object[]{}); // 4、list集合,元素个数为零 List<String> list = new ArrayList<>(); request.setAttribute("emptyList",list); // 5、map集合,元素个数为零 Map<String,Object> map=new HashMap<>(); request.setAttribute("emptyMap",map); %> ${empty emptyNull}<br/> ${empty emptyString}<br/> ${empty emptyArray}<br/> ${empty emptyList}<br/> ${empty emptyMap}<br/> <hr/> ${12 == 12 ? "我好帅":"你骗人"} </body> </html>
iii. “.”点运算和[]中括号运算符
点运算,可以输出Bean对象中某个属性的值。
[]中括号运算,可以输出有序集合中某个元素的值。
并且[]中括号运算,还可以输出map集合中key里含有特殊字符的key的值。
f.jsp
<%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %><%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/17 Time: 下午 01:33 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% Map<String,Object> map=new HashMap<>(); map.put("a.a.a","aaaValue"); map.put("b+b+b","bbbValue"); map.put("c-c-c","cccValue"); request.setAttribute("map",map); %> ${map['a.a.a']}<br> ${map["b+b+b"]}<br> ${map.c-c-c}<br> </body> </html>