Java基础(29)表达式语言(EL)的隐式对象及其作用

表达式语言(Expression Language,简称EL)是JSP 2.0及以上版本中引入的一种简化页面代码编写的语言,它提供了一种在JSP页面中更容易使用JavaBean属性及集合的方式。EL主要用于简化对Java代码的调用,特别是从后端到前端的数据传输。

EL定义了一套隐式对象,这些对象可以直接在EL表达式中使用,而不需要显式声明。以下是EL中的一些常见隐式对象及其作用:

1. pageScope

  • 作用:包含当前页面作用域内所有属性的Map。
  • 访问方式:pageScope['attributeName']

2. requestScope

  • 作用:包含当前请求作用域内所有属性的Map。
  • 访问方式:requestScope['attributeName']

3. sessionScope

  • 作用:包含当前会话作用域内所有属性的Map。
  • 访问方式:sessionScope['attributeName']

4. applicationScope

  • 作用:包含应用作用域(ServletContext)内所有属性的Map。
  • 访问方式:applicationScope['attributeName']

5. param

  • 作用:包含请求参数的Map,所有参数的值类型都是String。
  • 访问方式:param['paramName']

6. paramValues

  • 作用:包含请求参数的Map,它允许一个参数有多个值,因此Map的值是String数组。
  • 访问方式:paramValues['paramName'][index]

7. header

  • 作用:包含HTTP请求头的Map,所有头信息的值类型都是String。
  • 访问方式:header['headerName']

8. headerValues

  • 作用:包含HTTP请求头的Map,允许头信息有多个值,值是String数组。
  • 访问方式:headerValues['headerName'][index]

9. cookie

  • 作用:包含请求中所有的Cookie对象的Map,可以直接访问每个cookie的值。
  • 访问方式:cookie['cookieName'].value

10. initParam

  • 作用:包含所有初始化参数的Map(如web.xml中配置的)。
  • 访问方式:initParam['paramName']

源码级解析

EL是由JSP容器实现的,我们通常不直接处理其源码。但是,我们可以通过理解EL表达式是如何被解析和执行的来更深入地了解其工作原理。

当JSP页面被请求时,容器会解析页面上的EL表达式。容器内部将EL表达式转换为一个抽象语法树(AST),然后按照这个树来计算表达式的值。计算过程中,容器会检查隐式对象的Map,以及显式设置的属性,从而获取相应的值。

代码演示

一个简单的例子,使用param隐式对象输出请求中的参数值:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL Implicit Objects Demo</title>
</head>
<body>
Hello, ${param.name}!
</body>
</html>

假设请求URL是http://example.com/hello.jsp?name=John,页面会输出:

Hello, John!

在这个例子中,${param.name}是一个表达式,其中param是隐式对象,而name是请求参数的名字。

JSP容器在解析这个表达式时,会从param隐式对象中获取name参数的值,并将其输出到页面上。如果没有传递name参数,输出会是Hello, !,因为param.name将解析为null

EL表达式提供了一种简洁高效的方式来访问后台数据。通过使用EL隐式对象,开发者可以在JSP页面中以极简的代码实现数据访问和展示。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辞暮尔尔-烟火年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值