EL表达式

EL表达式

什么是EL表达式

EL表达式全称是Expreetion Language,是表达式语言

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

EL表示式在输出数据的时候比jsp表达式要简洁很多

<%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2021/2/27
  Time: 10:03
  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("key1","value");
    %>
    表达式脚本输出key的值是:
    <%= request.getAttribute("key1")%><br>
    EL表达式输出key的值是:
    ${key}
</body>
</html>

EL表达式的输出格式是:${表达式}

EL表达式在输出null的时候输出的是空串,jsp则输出的是null字符串。

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

EL表达式主要是在jsp也买你中输出数据,主要输出域对象中的数据。


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        request.setAttribute("key","requestContext");
        session.setAttribute("key","sessionContext");
        application.setAttribute("key","applicationContext");
        pageContext.setAttribute("key","pageContext");
    %>
    EL表达式输出key的值是:
    ${key}
</body>
</html>

当四大域中的值都有同样的key时输出顺序是按从小到大的顺序进行输出的

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

需求一:输出Person类中的普通属性,数组属性,List集合属性和map属性。

package com.bean;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class Person {

    private String name;
    private String[] phone;
    private List<String> city;
    private Map<String,Object> map;

    public Person() {
    }


    public String[] getPhone() {
        return phone;
    }

    public void setPhone(String[] phone) {
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List getCity() {
        return city;
    }

    public void setCity(List city) {
        this.city = city;
    }

    public Integer getAge() {
        return 18;
    }

    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 + '\'' +
                ", phone=" + Arrays.toString(phone) +
                ", city=" + city +
                ", map=" + map +
                '}';
    }
}

<%@ page import="com.bean.Person" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %><%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2021/2/27
  Time: 13:30
  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.setPhone(new String[]{"11817878","5456465456466"});
        List<String> list = new ArrayList<>();
        list.add("上海");
        list.add("广州");
        person.setCity(list);
        Map<String,Object> map= new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
        person.setMap(map);
        pageContext.setAttribute("person",person);
        %>
        输出person
        ${person}<br/>
        输出person的name属性:
        ${person.name}<br/>
        输出person的age属性:
        ${person.age}<br/>
        输出phone信息:
        ${person.phone[0]}<br/>
        ${person.phone[1]}<br/>
        输出city集合中的元素值:
        ${person.city}  <br/>
        输出list集合中个别元素值:
        ${person.city[0]}<br/>
        输出person中map集合:
        ${person.map}<br/>
        输出map中指定的key1:
        ${person.map.key1}
</body>
</html>

需要注意的是,在用EL表达式中输出其中的私有属性其实是调用了perosn类中的get方法。

EL表达式–运算

关系运算

在这里插入图片描述

逻辑运算

在这里插入图片描述

算数运算

在这里插入图片描述

empty运算

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

以下几种情况为空:

  1. 值为null时
  2. 值为空串时
  3. 值是Object数组长度为0时
  4. list集合元素个数为0
  5. map集合元素个数为0

三元运算

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

“.”运算与“[]”运算

"."运算可以输出baen对象中某个有序集合中某个元素的值

"[]"可以输出有序集合中某个元素的值

并且“[]”可以输出map集合中key里面包含的特殊字符key的值

<%
    Map<String,Object> map = new HashMap<>();
    map.put("a.a.a","aaavalue");
    map.put("bbb","bbbvalue");
    map.put("ccc","cccvalue");
    request.setAttribute("map",map);
%>
输出bbb
${map.bbb}
${map ['bbb']}
输出a.a.a
${map ['a.a.a']}

EL表达式中的11个隐含对象

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

变量类型作用
pageContextpageContextImp他可以获取jsp中的九大内置对象
pageScopeMap<String,Object>它可以获取pageContext域中的数据
requestScopeMap<String,Object>它可以获取request域中的数据
sessionScopeMap<String,Object>它可以获取session域中的数据
applicationScopeMap<String,Object>它可以获取servletContext域中的数据
paramMap<String,Object>它可以获取请求参数的值
paramValuesMap<String,Object[]>它可以获取请求参数的值,获取多个值得时候使用
headerMap<String,String>它可以获取请求头的信息
headerValuesMap<String,String[]>它可以获取请求头的信息,获取多个值的时候使用
cookieMap<String,Cookie>它可以获取当前请求的Cookie信息
initPatamMap<String,String>它可以获取在web.xml配置的上下文参数

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

pageScopepageContext域
requestScopeRequest域
sessionScopeSeesion域
applicationScopeservletContext域

Scope与域的使用

<%
    pageContext.setAttribute("key1","pageContext1");
    pageContext.setAttribute("key2","pageContext2");
    request.setAttribute("key1","request");
    session.setAttribute("key1","session");
    application.setAttribute("key1","application");
%>
输出不同的域中的同key名信息:
${pageScope.key1}
${requestScope.key1}
${sessionScope.key1}
${applicationScope.key1}<br/>

<%--其实就是调用了这个参数的get方法--%>
<%--<%=request.getScheme()%>--%>
1. 协议:${pageContext.request.scheme}<br/>
<%--<%=request.getServerName()%>--%>
2. 服务器 ip:${pageContext.request.serverName} <br/>
<%--<%=request.getServerPort()%>--%>
3. 服务器端口:${pageContext.request.serverPort} <br/>
<%--<%=request.getContextPath()%>--%>
4. 获取工程路径:${pageContext.request.contextPath}<br/>
<%--<%=request.getMethod()%>--%>
5. 获取请求方法:${pageContext.request.method}<br/>
<%--<%=request.getRemoteHost()%>--%>
6. 获取客户端 ip 地址:${pageContext.request.remoteHost}<br/>
<%--<%=session.getId()%>--%>
7. 获取会话的 id 编号:${pageContext.session.id}<br/>

param与paramValues的使用

用param输出请求参数username:${param.username}<br/>
用param输出请求参数password:${param.password}<br/>
用paramValues输出请求参数的单个值:${paramValues.username[0]}<br/>
<%--它可以用下标的方式将值输出,而param只能输出第一个--%>
用paramValues输出请求参数的多个值:${paramValues.hobby[0]}${paramValues.hobby[1]}<br/>

header与headerValues的使用

<%--header的使用--%>
输出header中User-Agent:${header["User-Agent"]}<br/>
输出header中Connection内容:${header["Connection"]}<br/>
<%--headerValues的使用--%>
输出header中User-Agent:${headerValues["User-Agent"][0]}<br/>

一般情况下请求头多个值得情况比较少

cookie与initParam使用

<%--header的使用--%>
输出header中User-Agent:${header["User-Agent"]}<br/>
输出header中Connection内容:${header["Connection"]}<br/>
<%--headerValues的使用--%>
输出header中User-Agent:${headerValues["User-Agent"][0]}<br/>
输出cookie的名称:${cookie.JSESSIONID.name}<br/>
输出cookie的值:${cookie.JSESSIONID.value}<br/>

输出Context-param中的username属性值:${initParam.username}

er的使用–%>
输出header中User-Agent: h e a d e r [ " U s e r − A g e n t " ] < b r / > 输 出 h e a d e r 中 C o n n e c t i o n 内 容 : {header["User-Agent"]}<br/> 输出header中Connection内容: header["UserAgent"]<br/>headerConnection{header[“Connection”]}

<%–headerValues的使用–%>
输出header中User-Agent: h e a d e r V a l u e s [ " U s e r − A g e n t " ] [ 0 ] < b r / > 输 出 c o o k i e 的 名 称 : {headerValues["User-Agent"][0]}<br/> 输出cookie的名称: headerValues["UserAgent"][0]<br/>cookie{cookie.JSESSIONID.name}

输出cookie的值:${cookie.JSESSIONID.value}

输出Context-param中的username属性值:${initParam.username}


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页