Java高手速成 | EL表达式语言

news2024/12/26 13:19:13

 本文主要讲解EL表达式语言的作用、基本语法以及运算符。

01、EL的作用

当需要在JSP页面显示变量以及JavaBean对象时,可以使用JSP的表达式,如<%=变量%>的形式,也可以直接使用如<%out.println(变量)%>的Java输出语句。尤其当JSP页面从后台接收较多对参数并显示的时候,此时页面将会混杂大量的Java代码。JSP作为表示层,主要负责内容的显示,如果夹杂过多的Java代码,不利于页面的设计与维护。

因此,在JSP2.0规范中增加了EL(Expression Lanuage,表达式语言),与普通的JSP表达式以及out对象一样,EL可以用于在JSP页面中进行数据的输出显示。此外EL还具备功能强大的运算符功能,可以进行数值以及逻辑运算,能够更为灵活地访问普通变量、JavaBean对象以及集合。相比于Java代码,EL更为直观、简洁,不仅能够减少页面的代码量,也更容易被前端设计人员所理解,方便网页的设计与维护,提高开发效率。

02、EL基本语法

EL的原理与JSP表达式的类似,都是通过JSP容器解释执行后,在浏览器中显示表达式的结果。EL默认是直接在JSP页面中开启的,可以通过page指令的isElIgonred属性设置JSP页面是否能使用EL。isElIgonred的默认值为false,表示开启EL,ture表示关闭。

EL的语法格式为${Expression}。其中,花括号{}里面的表达式可以使用各种运算符,以方便地显示各类数据。假设通过Servlet处理完业务流程后,返回一个商品goods的JavaBean对象,跳转到JSP页面中显示其商品名称,需要使用如下Java代码。

Goods goods=(Goods)request.getAttribute("goods");
String gname=goods. getGname();
out.println("gname");

 而如果使用EL,只需要代码如下:

${requestScope.goods.gname}

 很显然,使用EL要更加简洁,同时也很容易被理解。

03、EL定义的基本运算符

为了更好地进行数据的读取,EL定义了存取、算数、关系、逻辑、条件、empty等运算符,本文将对这些运算符的使用方法进行介绍。

1. .和[]存取运算符

EL可以使用两种数据读取的运算符:.(点运算符)和[]。第一节使用.运算符对商品名称进行读取,在这里也可以使用[]运算符进行读取。编写代码如下所示。

${requestScope.goods["gname"]}

下面3种情况必须使用[]运算符,而不能使用.运算符。

(1) 属性名称中包含特殊字符的情况。

特殊字符包括数字、横线、下画线等,此时只能使用[]运算符。例如,假设goods有一个属性名称为goods_count,其代码就只能写成如下形式。

${requestScope.goods["goods_count"]}

(2) 属性名称为动态取值的情况。

如果属性名称中包含变量时,就只能使用[]运算符。例如:

String attribute;//attribute可能取值"gname","gprice"或者"gid"
${requestScope.goods[attribute]}

(3) 获取数组中的元素的情况。

 假设使用以下语句将定义的数组保存到request中。

String goodsArray[]={"小米10","华为P30","红米K30Pro"};
request.setAttribute("goodsArray",goodsArray);

那么,在JSP页面中只能通过[]运算符依次读取数组中的各元素。

${requestScope. goodsArray [0]}
${requestScope. goodsArray [1]}
${requestScope. goodsArray [2]}

2. 算数运算符

EL定义的算数运算符如表1所示。算数运算符可以进行一些简单的运算比较,进而帮助实现逻辑判断功能。

■ 表1EL定义的算数运算符

3. 关系运算符

EL定义的关系运算符如表2所示。

■ 表2EL定义的关系运算符

在使用两个变量进行关系运算比较时,应采用${变量1==变量2}的形式,而不是${变量1}=${变量2}。

4. 逻辑运算符

EL定义的逻辑运算符如表3所示。

■ 表3EL定义的逻辑运算符

5. 条件运算符

条件运算符的基本语法为${A?B:C},表示当满足条件A时,表达式的值为B;否则,表达式的值为C。例如${2>5?1:0}的值为0。

6. empty运算符

empty运算符用于判断数据是否为空,语法格式如下:

${empty A}

empty运算符的规则:当A的值为null,或者A不存在,或者A为空字符串,或者A为空数组时,均返回为true;否则返回false。

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

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

相关文章

C语言学习笔记-循环

有的时候&#xff0c;我们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多次执行一个…

硬核工厂!钢厂远程监管,三维组态监控 HMI

钢铁行业作为我国的支柱产业&#xff0c;也是我国能源消耗的重点行业之一&#xff0c;随着国家节能减排政策的推进&#xff0c;有效实施能源管控是企业提高能源绩效、降低能源成本和提高核心竞争力的重要途径。通过对钢铁企业能耗现状和能源管理模式的分析可以得知&#xff0c;…

GitHub中如何创建自己的存储库?(图文详解)

前言 &#x1f4dc; “ 作者 久绊A ” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴 目录 一、创建自己的存储库&#xff1f; 二、详细介绍 1、Reposito…

微前端——一个属于前端的时代

关于微前端为什么需要微前端&#xff1f;What&#xff1f;什么是微前端Why&#xff1f;为什么去使用微前端How&#xff1f;怎样落地微前端Where&#xff1f;在什么场景下使用微前端CSS 隔离方案JavaScript 沙箱机制快照沙箱Proxy 代理沙箱legacySandbox(单例沙箱)proxySandbox(…

云原生丨手把手教你搭建自己的第一个微服务

文章目录前言一、环境准备软件要求配置操作二、拉取框架三、模块搭建SDK模块SDK-Cloud 模块common模块API模块前言 我们知道&#xff0c;微服务架构是把项目里的每一个功能元素独立出来&#xff0c;再对这些功能元素进行动态组合。这样的优点在于&#xff1a;节省调用资源&…

基于Springboot搭建java项目(三十一)—— 什么是Docker

什么是Docker 一、容器技术 1、应用程序的部署问题 ​ 还原应用程序部署的场景&#xff0c;开发在开发应用的时候&#xff0c;要自己搭建一套环境&#xff0c;进行本地调试&#xff0c;这时就需要在本地搭建一套JVM&#xff0c;NODE&#xff0c;NGNIX等一些应用程序运行的环…

【大唐杯备考】——5G系统勘察设计(学习笔记)

&#x1f4d6; 前言&#xff1a;本期介绍5G系统勘察设计。 目录&#x1f552; 1. 概述&#x1f558; 1.1 5G网络预规划&#x1f564; 1.1.1 5G建网需求确认&#x1f564; 1.1.2 4G现网评估&#x1f564; 1.1.3 站点规模估算&#x1f564; 1.1.4 5G仿真评估&#x1f558; 1.2 5G…

新年首捷 | 全息网御入选《CCSIP 2022中国网络安全产业全景图(第五版)》

2023年2月1日&#xff0c;FreeBuf咨询正式发布 《CCSIP&#xff08;China Cyber Security Panorama&#xff09;2022 中国网络安全行业全景册&#xff08;第五版&#xff09;》&#xff0c;旨在帮助企业更好地了解中国网络安全技术与市场的发展趋势&#xff0c;并为企业安全建设…

Python接口测试实战5(下) - RESTful、Web Service及Mock Server

本节内容REST及RESTful APIWeb ServiceXML解析Mock ServerREST及RESTful APIREST&#xff1a;表述性状态转移或表现层状态转移&#xff0c;“表现”及每个接口地址(URI)都表现为&#xff08;视为&#xff09;一个资源对象&#xff08;文本资源、图片资源、服务资源&#xff09;…

请问软件设计师、网络工程师、软件评测师还是系统集成项目管理师,哪个好考?

软件设计师、网络工程师、软件评测师还是系统集成项目管理师&#xff1f;这些都是属于软考中级科目&#xff0c;看自己是想从事哪个方向咯。都可以备考啊&#xff0c;毕竟含金量都差不多的&#xff01; 因为自己备考的是网工&#xff0c;就说说网工的备考如何吧 一、中级网络…

Quest Pro降价和Vive XR Elite之我见

本来没打算写Vive XR Elite&#xff0c;作为HTC首个支持VST透视的VR头显&#xff0c;它也引起了业内关注&#xff0c;尤其是去年10月份Meta Quest Pro重磅发布之后&#xff0c;大家就会看到&#xff0c;领域内的玩家都在朝着VST发力。那为什么现在来写Vive XR Elite呢&#xff…

即时通讯开发之TCP/IP中的TCP 协议概述

终于看到了 TCP 协议,这是 TCP/IP 详解里面最重要也是最精彩的部分,要花大力气来读。前面的 TFTP 和 BOOTP 都是一些简单的协议,就不写笔记了,写起来也没啥东西。 TCP 和 UDP 处在同一层---运输层,但是 TCP 和 UDP 最不同的地方是,TCP 提供了一种可靠的数据传输服务,TCP 是面向…

从零开始手写基于Web Components组件

前言 本文将详细讲解如何用最基本的typescript&#xff0c;vite&#xff0c;less构建基于Web Components的组件&#xff0c;目前已实现Button&#xff0c;Icon&#xff0c;Image&#xff0c;Tabs&#xff0c;Input&#xff0c;Message组件。首先介绍项目的整体架构&#xff0c…

新C++(6):继承那些事儿

"你在酒杯还未干的时间里&#xff0c;收藏这份情谊"一、回顾继承什么是继承&#xff1f;继承是面向对象编程语言的三大特征之一。通过继承机制&#xff0c;面向对象的程序设计可以很大限度地对代码进行复用。它允许程序员在保持原有类特性的基础上进行扩展&#xff0…

scrapy_redis概念作用和流程

scrapy_redis概念作用和流程 学习目标 了解 分布式的概念及特点了解 scarpy_redis的概念了解 scrapy_redis的作用了解 scrapy_redis的工作流程 在前面scrapy框架中我们已经能够使用框架实现爬虫爬取网站数据,如果当前网站的数据比较庞大, 我们就需要使用分布式来更快的爬取数…

制药行业中各种化合物的净化,大孔吸附净化氨基酸

基于吸附功能的聚苯乙烯特种树脂 Tulsimer ADS-600 是一款没有离子官能基的&#xff0c;由交联聚苯乙烯合成的功能强大的吸附型树脂。 Tulsimer ADS-600 主要应用于水溶液中吸附酚及其化合物&#xff0c;氯代烃等含氯物质&#xff0c;表面活性剂&#xff0c;氨基酸&#…

【C++修炼之路】C++入门(中)—— 函数重载和引用

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录一、前言二、函数重载1、重载规则2、函数名修饰规则三、引用1、区分2、本质3、特性4、应用a、做参数b、做返回值5、效率比较6、常…

windows安装cnpm

文章目录1 cnpm简介2 cnpm 安装步骤1 cnpm简介 npm下载速度比较慢&#xff0c;可以通过cnpm下载node包 2 cnpm 安装步骤 找到nodejs的安装路径&#xff1a; 使用nvm安装和管理node 直接安装node的方式 直接通过安装包安装node的方式&#xff0c;node会被安装在某个实际目录下…

docker pull nginx

取最新版的 Nginx 镜像 docker pull nginx:latest 查看本地镜像 使用以下命令来查看是否已安装了 nginx&#xff1a; $ docker images 运行容器 安装完成后&#xff0c;我们可以使用以下命令来运行 nginx 容器&#xff1a; $ docker run --name nginx-door -p 8080:80 -…

VS code的使用指南

VS code的使用指南 VS code的安装与下载 VS Code的安装地址的 在下面选择版本的位置进行安装&#xff08;一般选择Stable进行安装&#xff0c;这个软件是跨系统的安装与设置相关的内容信息&#xff09;。 插件安装 直接点击这个位置,选择自己需要的相应的插件 这些都是常用的…