EL 表达式

目录

一、EL 表达式简介

二、EL表达式的使用

1、EL表达式搜索域数据的顺序

2、EL 表达式输出 Bean 的普通属性,数组属性,List  集 合属性,Map  集合属性

 3、EL  表达式——运算

1)运算符

2)逻辑运算

3)算数运算

4)empty  运算

5)三元运算

6)“.”点运算 和 []中括号运算符

4、EL  表达式的 11个隐含对象

1)EL 获取四个特定域中的属性

2)pageContext 对象的使用

3)EL 表达式其他隐含对象的使用


一、EL 表达式简介

EL  表达式的全称是:Expression  Language。是表达式语言。

EL  表达式的什么作用:EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。

因为  EL  表达式在输出数据的时候,要比  jsp  的表达式脚本要简洁很多。

 
    <%
        request.setAttribute("key","值");
    %>

    表达式脚本输出 key的值是:
    <%=request.getAttribute("key1")==null?"":request.getAttribute("key1")%>
EL表达式输出 key的值是:${key1}

二、EL表达式的使用

1、EL表达式搜索域数据的顺序

EL 表达式主要是在  jsp  页面中输出数据。 

当四个域中都有相同的 key 的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。


    <%
        //往四个域中都保存了相同的  key的数据。 
        request.setAttribute("key", "request");
        session.setAttribute("key", "session"); 
        application.setAttribute("key", "application"); 
        pageContext.setAttribute("key", "pageContext");
    %>
    ${ key } 

2、EL 表达式输出 Bean 的普通属性,数组属性,List  集 
合属性,Map  集合属性

public class Person {
    private String name;
    private String[] phones;
    private List cities;
    private Map map;

    public int getAge() {
        return 18;
    }

    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;
    }
}

输出的代码: 


    <%
        Person person = new Person(); 

        person.setName("国哥好帅!");
        person.setPhones(new String[]{"18610541354","18688886666","18699998888"}); 

        List cities = new ArrayList();
        cities.add("北京");
        cities.add("上海");
        cities.add("深圳"); 
        person.setCities(cities);

        Mapmap = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3"); 
        person.setMap(map);

        pageContext.setAttribute("p", person); 
    %>

    输出  Person:${p} 
输出 Person的 name属性:${p.name}
输出 Person的 pnones数组属性值:${p.phones[2]}
输出 Person的 cities集合中的元素值:${p.cities}
输出 Person的 List集合中个别元素值:${p.cities[2]}
输出 Person的 Map集合: ${p.map}
输出 Person的 Map集合中某个 key的值: ${p.map.key3}
输出 Person的 age属性:${p.age}

底层调用的是 get 方法获取数值 

 3、EL  表达式——运算

语法:${ 运算表达式 } , EL 表达式支持如下运算符

1)运算符

关系运算符 说明 范例 结果
==  或  eq 等于 ${ 5 == 5 } 或 ${ 5 eq 5 } true
!=  或  ne 不等于 ${  5 !=5  }  或 ${ 5 ne 5 } false
<  或   lt 小于 ${ 3 < 5 }  或  ${ 3 lt 5  } true
> 或 gt 大于 ${ 2 > 10 }  或 ${  2 gt 10 } false
<=  或  le 小于等于 ${ 5 <= 12 }  或  ${ 5 le 12 } true
>=  或 ge 大于等于 ${ 3 >= 5 }   或  ${ 3 ge 5 } false

2)逻辑运算

逻辑运算符 说明 范例 结果
&&  或  and 与运算

${ 12 == 12 && 12 < 11 }  或

${ 12 == 12 and 12 < 11 }

false
||  或 or 或运算

${ 12 == 12 || 12 < 11 }   或

${ 12 == 12 or 12 < 11 }

true
!  或  not 取反运算

${ !true }  或  ${not true }

false

3)算数运算

算数运算 说明 范例 结果
+ 加法 ${ 12 + 18 } 30
- 减法 ${ 18 - 8 } 10
* 乘法 ${ 12 * 12 } 144
/    或  div 除法 ${ 144 / 12 }  或  ${ 144 div 12 } 12
%  或  mod 取模 ${ 144 % 10 }  或  ${ 144 mod 10 }  4

4)empty  运算

empty 运算可以判断一个数据是否为空,如果为空,则输出  true,不为空输出  false。 

以下几种情况为空:

  1. 值为  null  值的时候,为空
  2. 值为空串的时候,为空
  3. 值是  Object  类型数组,长度为零的时候
  4. list  集合,元素个数为零
  5. map 集合,元素个数为零 

5)三元运算

表达式  1?表达式  2:表达式  3

如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3 的值。

6)“.”点运算 和 []中括号运算符

点运算,可以输出  Bean  对象中某个属性的值。 

中括号运算,可以输出有序集合中某个元素的值。并且中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。


    <%
        Map 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'] } 
${ map["b+b+b"] }
${ map['c-c-c'] }
%>

4、EL  表达式的 11个隐含对象

EL  表达式中 11 个隐含对象,是 EL 表达式中自己定义的,可以直接使用。
 

变量  类型  作用
pageContext PageContextImpl 它可以获取  jsp  中的九大内置对象
pageScope  Map 它可以获取  pageContext  域中的数据
requestScope  Map 它可以获取  Request  域中的数据
sessionScope Map 它可以获取  Session  域中的数据
applicationScope                         Map 它可以获取  ServletContext  域中的数据
param  Map 它可以获取请求参数的值
paramValues Map 它也可以获取请求参数的值,获取多个值的时候使用。
header  Map 它可以获取请求头的信息
headerValues Map 它可以获取请求头的信息,获取多个值的情况
cookie Map 它可以获取当前请求的  Cookie  信息
initParam Map 它可以获取在  web.xml  中配置的上下文参数

1)EL 获取四个特定域中的属性

  • pageScope:pageContext 域 
  • requestScope: Request  域 
  • sessionScope:Session  域 
  • applicationScope:ServletContext 域

    <%
        pageContext.setAttribute("key1", "pageContext1"); 
        pageContext.setAttribute("key2", "pageContext2");
        request.setAttribute("key2", "request");
        session.setAttribute("key2", "session"); 
        application.setAttribute("key2", "application");
    %>

    ${ applicationScope.key2 } 

2)pageContext 对象的使用

  1. 协议
  2. 服务器  ip
  3. 服务器端口
  4. 获取工程路径
  5. 获取请求方法
  6. 获取客户端 ip 地址
  7. 获取会话的 id 编号

    <%--
        request.getScheme() 它可以获取请求的协议 
        request.getServerName() 获取请求的服务器  ip或域名 
        request.getServerPort() 获取请求的服务器端口号 
        getContextPath() 获取当前工程路径
        request.getMethod() 获取请求的方式(GET或  POST) 
        request.getRemoteHost() 获取客户端的  ip 地址
        session.getId() 获取会话的唯一标识
    --%>

    <%
        pageContext.setAttribute("req", request); 
    %>
    
    <%-- 使用jsp的内置对象 --%>
    <%= request.getScheme() %> 
1.协议:${ req.scheme}
<%-- pageContext可以获取jsp的九大内置对象 --%> 2.服务器 ip:${ pageContext.request.serverName }
3.服务器端口:${ pageContext.request.serverPort }
4.获取工程路径:${ pageContext.request.contextPath }
5.获取请求方法:${ pageContext.request.method }
6.获取客户端 ip地址:${ pageContext.request.remoteHost }
7.获取会话的 id编号:${ pageContext.session.id }

 输出结果

http
1.协议:http
2.服务器 ip:localhost
3.服务器端口:8081
4.获取工程路径:/09_EL_JSTL
5.获取请求方法:GET
6.获取客户端 ip地址:0:0:0:0:0:0:0:1
7.获取会话的 id编号:47C7BF10A60F4B68C33DD71EFFB525B4

3)EL 表达式其他隐含对象的使用

输出请求参数  username的值:${ param.username } 
输出请求参数 password的值:${ param.password }
输出请求参数 username的值:${ paramValues.username[0] }
输出请求参数 hobby的值:${ paramValues.hobby[0] }
输出请求参数 hobby的值:${ paramValues.hobby[1] }
获取 Cookie的名称:${ cookie.JSESSIONID.name } 
获取 Cookie的值:${ cookie.JSESSIONID.value }

 web.xml配置


    username 
    root
 

    url
    jdbc:mysql:///test 
输出<Context-param>username的值:${ initParam.username } 
输出<Context-param>url的值:${ initParam.url }

 

你可能感兴趣的:(JavaWeb,java,EL表达式)