EL 表达式

本文详细介绍了EL(Expression Language)表达式,包括其作用、格式、输出规则以及在JSP中的应用。EL简化了数据输出,按照page、request、session、application四个域的顺序查找数据。此外,还讲解了EL的运算符,如关系、逻辑和算术运算,以及empty运算判断数据是否为空。文章还涉及EL如何处理Bean属性、数组、List和Map,并展示了隐含对象的使用,如pageContext、param、header和cookie等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

EL 表达式的作用:EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。 因为 EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很多。

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

EL 表达式在输出 null 值的时候,输出的是空串。jsp 表达式脚本输出 null 值的时候,输出的是 null

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

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

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

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

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

<body>
<%
    Person person = new Person();
    person.setName("国哥好帅!");
    person.setPhones(new String[]{"18610541354","18688886666","18699998888"});
    List<String> cities = new ArrayList<String>();
    cities.add("北京");
    cities.add("上海");
    cities.add("深圳");
    person.setCities(cities);
    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 的 pnones 数组属性值:${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  找到是get方法


</body>

EL 表达式——运算

语法:${ 运算表达式 } ,

EL 表达式支持如下运算

1)关系运算

2)逻辑运算

3)算数运算

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 类型数组,长度为零的时候
    request.setAttribute("emptyArr", new Object[]{});
// 4、list 集合,元素个数为零
    List<String> list = new ArrayList<>();
// list.add("abc");
    request.setAttribute("emptyList", list);
// 5、map 集合,元素个数为零
    Map<String,Object> map = new HashMap<String, Object>();
// map.put("key1", "value1");
    request.setAttribute("emptyMap", map);
%>
${ empty emptyNull } <br/>
${ empty emptyStr } <br/>
${ empty emptyArr } <br/>
${ empty emptyList } <br/>
${ empty emptyMap } <br/>

</body>

三元运算:

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

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

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

.点运算,可以输出 Bean 对象中某个属性的值。 []中括号运算,可以输出有序集合中某个元素的值。 并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。

%>
${ empty emptyNull } <br/>
${ empty emptyStr } <br/>
${ empty emptyArr } <br/>
${ empty emptyList } <br/>
${ empty emptyMap } <br/>
<%
    Map<String,Object> map1 = new HashMap<String, Object>();
    map1.put("a.a.a", "aaaValue");
    map1.put("b+b+b", "bbbValue");
    map1.put("c-c-c", "cccValue");
    request.setAttribute("map1", map1);
%>
${ map1['a.a.a'] } <br>
${ map1["b+b+b"] } <br>
${ map1['c-c-c'] } <br>

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 中配置的上下文参数

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

选择性输出,而不是默认输出顺序。

pageScope ====== pageContext 域

requestScope ====== Request 域

sessionScope ====== Session 域

applicationScope ====== ServletContext 域

<body>
    <%
        pageContext.setAttribute("key1", "pageContext1");
        pageContext.setAttribute("key2", "pageContext2");
        request.setAttribute("key2", "request");
        session.setAttribute("key2", "session");
        application.setAttribute("key2", "application");
    %>
    
        ${ applicationScope.key2 }

</body>

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);
%>
<%=request.getScheme() %> <br>
1.协议: ${ req.scheme }<br>
2.服务器 ip:${ pageContext.request.serverName }<br>
3.服务器端口:${ pageContext.request.serverPort }<br>
4.获取工程路径:${ pageContext.request.contextPath }<br>
5.获取请求方法:${ pageContext.request.method }<br>
6.获取客户端 ip 地址:${ pageContext.request.remoteHost }<br>
7.获取会话的 id 编号:${ pageContext.session.id }<br>

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

param                                 Map                 它可以获取请求参数的值

paramValues                 Map         它也可以获取请求参数的值,获取多个值的时候使用。

header                         Map                                 它可以获取请求头的信息

headerValues                 Map                 它可以获取请求头的信息,它可以获取多个值的情况

cookie                         Map                                         它可以获取当前请求的 Cookie

<body>
输出请求参数 username 的值:${ param.username } <br>
输出请求参数 password 的值:${ param.password } <br>
输出请求参数 username 的值:${ paramValues.username[0] } <br>
输出请求参数 hobby 的值:${ paramValues.hobby[0] } <br>
输出请求参数 hobby 的值:${ paramValues.hobby[1] } <br>
输出请求头【User-Agent】的值:${ header['User-Agent'] } <br>
输出请求头【Connection】的值:${ header.Connection } <br>
输出请求头【User-Agent】的值:${ headerValues['User-Agent'][0] } <br>
获取 Cookie 的名称:${ cookie.JSESSIONID.name } <br>
获取 Cookie 的值:${ cookie.JSESSIONID.value } <br/>
输出&lt;Context-param&gt;username 的值:${ initParam.username } <br>
输出&lt;Context-param&gt;url 的值:${ initParam.url } <br>

</body>
<context-param>
        <param-name>username</param-name>
        <param-value>root</param-value>
</context-param>
<context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql:///test</param-value>
</context-param>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值