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页面中以极简的代码实现数据访问和展示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 年最新本地、云服务器安装部署 miniconda 环境详细教程(更新中)

Anaconda 概述 Anaconda 是专门为了方便使用 Python 进行数据科学研究而建立的一组软件包&#xff0c;涵盖了数据科学领域常见的 Python 库&#xff0c;并且自带了专门用来解决软件环境依赖问题的 conda 包管理系统。主要是提供了包管理与环境管理的功能&#xff0c;可以很方便…

picoCTF-Web Exploitation-More SQLi

Description Can you find the flag on this website. Additional details will be available after launching your challenge instance. Hints SQLiLite 先随便输入个账号密码登录一下&#xff0c;得到查询SQL&#xff0c;接下来应该对SQL进行某些攻击来绕过密码登录成功 -- …

微信小程序踩坑,skyline模式下,简易双向绑定无效

工具版本 基础库版本 Skline模式 页面json设置 问题描述 skyline模式下,textarea,input标签设置简易双向绑定 model:value是无效的,关闭skyline模式就正常使用了 截图展示 这里只展示了textarea标签,input标签的简易双向绑定也是无效的 总结 我在文档里面是没找到skyline里面不…

Android OpenMAX(八)如何学习OMXNodeInstance

前面一篇文章中我们看到media.codec service创建OMX组件后会把组件传递给一个OMXNodeInstance对象,并且把OMXNodeInstance对象返回到Framework层,Framework通过调用OMXNodeInstance的API来操作OMX组件。从这一篇开始,我们一起学习OMXNodeInstance,在这里我要强调一下,接下…

动态规划----股票买卖问题(详解)

目录 一.买卖股票的最佳时机&#xff1a; 二.买卖股票的最佳时机含冷冻期&#xff1a; 三.买卖股票的最佳时期含⼿续费&#xff1a; 四.买卖股票的最佳时机III: 五.买卖股票的最佳时机IV: 买卖股票的最佳时机问题介绍&#xff1a;动态规划买卖股票的最佳时机是一个经典的…

windows使用Docker-Desktop部署lobe-chat

文章目录 window安装docker-desktop下载和启动lobe-chatAI大语言模型的选择lobe-chat设置大模型连接 window安装docker-desktop docker-desktop下载地址 正常安装应用&#xff0c;然后启动应用&#xff0c;注意启动docker引擎 打开右上角的设置&#xff0c;进入Docker Engine设…

算法学习系列(六十):区间DP

目录 引言区间合并模板一、石子合并二、环形石子合并三、能量项链 引言 关于这个区间 D P DP DP &#xff0c;其实是有套路和模板的&#xff0c;题型的话也是变化不多&#xff0c;感觉就那几种&#xff0c;只不过有些题会用到高精度或者是要记录方案&#xff0c;所以整体来说…

Unity编辑器如何多开同一个项目?

在联网游戏的开发过程中&#xff0c;多开客户端进行联调是再常见不过的需求。但是Unity并不支持编辑器多开同一个项目&#xff0c;每次都得项目打个包(耗时2分钟以上)&#xff0c;然后编辑器开一个进程&#xff0c;exe 再开一个&#xff0c;真的有够XX的。o(╥﹏╥)o没错&#…

Hive 与 SQL 标准和主流 SQL DB 的语法区别

文章目录 1.Hive 简介2.Hive 与 SQL 标准和主流 SQL DB 的语法区别参考文献 1.Hive 简介 Hive是一种基于Hadoop的数据仓库软件&#xff0c;可以将结构化数据文件映射为一张数据库表&#xff0c;并提供了类SQL查询接口&#xff0c;使得用户可以使用SQL类语言来查询数据。Hive可…

7-117 死亡隧道

小毛驴要回家了,凭借着刚从老毛驴处学到的闪烁魔法,小毛驴信心满满地出发了。这一次它来到了另一条死亡隧道口,但是,小毛驴不知道死亡威胁随时存在,因为它所打算穿过的这条死亡隧道即将于T秒时间后坍塌。 已知小毛驴行走的速度是每秒17米,而小毛驴拥有的闪烁法术可以使它…

返回类型后置,一个用途是为了逻辑上的体现?

大家一般都是先关心参数&#xff0c;然后最后再看返回的是什么类型。 在这里把返回类型后置&#xff0c;可能就是一种逻辑上的体现吧 fmt的一个函数。 \fmt\core.h 这个函数的意义&#xff0c;应该就是用变长参数初始化成一个format_arg_store类型的变量&#xff0c;并返回。…

Rust学习笔记(上)

前言 笔记的内容主要参考与《Rust 程序设计语言》&#xff0c;一些也参考了《通过例子学 Rust》和《Rust语言圣经》。 Rust学习笔记分为上中下&#xff0c;其它两个地址在Rust学习笔记&#xff08;中&#xff09;和Rust学习笔记&#xff08;下&#xff09;。 编译与运行 Ru…

成功解决No module named ‘huggingface_hub.inference._text_generation‘

成功解决No module named huggingface_hub.inference._text_generation 目录 解决问题 解决思路 解决方法 解决问题 No module named huggingface_hub.inferen

python使用yaml文件以及元组样式字符串使用eval的类型转换

编程中&#xff0c;对于可变内容&#xff0c;最好是将其放入配置文件中&#xff0c;经过这段时间的学习&#xff0c;感觉使用yaml文件很方便。我的环境&#xff1a;win10&#xff0c;python3.8.10。 python使用yaml文件&#xff0c;首先要安装库。 pip38 install pyyaml 安装…

AWTK 开源串口屏开发(18) - 用 C 语言自定义命令

AWTK-HMI 内置了不少模型&#xff0c;利用这些模型开发应用程序&#xff0c;不需要编写代码即可实现常见的应用。但是&#xff0c;有时候我们需要自定义一些命令&#xff0c;以实现一些特殊的功能。 本文档介绍如何使用 C 语言自定义命令。 1. 实现 hmi_model_cmd_t 接口 1.1…

实现二叉树的基本操作

博主主页: 码农派大星. 关注博主带你了解更多数据结构知识 1我们先来模拟创建一个二叉树 public class TestBinaryTreee {static class TreeNode{public char val;public TreeNode left;public TreeNode right;public TreeNode(char val) {this.val val;}}public TreeNode …

交叉编译u-boot,qemu启动测试

交叉编译u-boot 1 配置交叉编译工具链&#xff1a; 下载地址 https://releases.linaro.org/components/toolchain/binaries/ ### CROSS-COMPILE export AARCH64_LINUX_GNU_TOOLS/media/wmx/cross_compile_tools/aarch64-linux-gun/gcc-x86_64_aarch64-linux-gnu/bin export …

linux 安装 mangodb 并设置服务开机自启

1、下载 wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz 2、解压 tar -zxvf mosquitto-1.6.8.tar.gz 3、编译安装cd mosquitto-1.6.8 make sudo make install4、在当前目录。进入mosquitto服务文件存放的文件夹 cd service/systemd可以看到3个文件 点击read…

【C/C++】设计模式——工厂模式:简单工厂、工厂方法、抽象工厂

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

二.基础篇: 面向对象进阶

1. 基础篇语法篇&#xff1a;一.基础篇&#xff1a;基础语法-CSDN博客 面向对象进阶 本章主要学习内容&#xff1a; static继承包&#xff0c;final&#xff0c;权限修饰符&#xff0c;代码块抽象类接口多态内部类 1. static static翻译过来就是静态的意思static表示静态&am…