【Java 进阶篇】JSP EL 详解

在这里插入图片描述

在 Java Web 开发中,JavaServer Pages(JSP)是一种强大的技术,用于创建动态 Web 应用程序。JSP 的一个关键方面是 Expression Language(EL)表达语言,它允许您在 JSP 页面中嵌入 Java 代码,以便在页面上访问和操作数据。本博客将深入探讨 JSP EL,从入门到精通。

什么是 JSP EL?

EL(Expression Language)是一种用于在 JSP 页面中嵌入动态内容的技术。它提供了一种访问和操作数据的方式,使得在 JSP 页面中可以轻松地嵌入 Java 变量、方法和表达式。使用 EL,您可以更轻松地将数据呈现在 Web 页面上,而无需大量的 Java 代码。

为什么需要 EL?

在传统的 JSP 开发中,要在页面上显示数据,通常需要使用大量的 Java 代码。这可能导致页面变得复杂,不易维护。EL 的引入旨在解决这个问题,它提供了一种更简单和干净的方式来访问和显示数据。

EL 的好处包括:

  • 简洁性:EL 允许您使用简洁的语法来访问和显示数据,而无需编写大量的 Java 代码。
  • 可读性:EL 代码更容易阅读和理解,特别是对于那些不熟悉 Java 的前端开发人员。
  • 可维护性:EL 代码更易于维护,因为它减少了代码的复杂性。
  • 模块化:使用 EL,您可以将数据和表示分开,使代码更易于维护和扩展。

EL 基础

在开始深入研究 JSP EL 之前,让我们先了解 EL 的一些基本概念和语法。

输出表达式

输出表达式用于在页面上显示数据。要使用输出表达式,只需将数据包装在 ${} 中。例如,${user.name} 表达式将显示用户的姓名。

<p>Welcome, ${user.name}!</p>

在这个例子中,${user.name} 的值将替换为用户的姓名,并显示在页面上。

值表达式

值表达式用于获取数据,但不会直接在页面上显示。它通常用于获取数据并将其存储在变量中,以供后续使用。值表达式使用 ${} 语法,如下所示:

<%-- 获取用户姓名并存储在变量中 --%>
<c:set var="userName" value="${user.name}" />

在这个示例中,${user.name} 的值将被存储在名为 userName 的变量中。

操作符

EL 支持多种操作符,用于执行各种操作,例如算术运算、比较运算和逻辑运算。以下是一些常用的 EL 操作符:

  • 算术运算符:+-*/%
  • 比较运算符:==!=<><=>=
  • 逻辑运算符:&&(与)、||(或)、!(非)

例如,您可以使用 == 运算符来比较两个值:

<c:if test="${user.age == 18}">You are 18 years old!
</c:if>

在这个示例中,如果用户的年龄等于 18,将显示 “You are 18 years old!”。

集合

EL 允许您访问集合(如列表、映射和数组)中的元素。您可以使用点号 . 和中括号 [] 来访问元素。例如,${items[0]} 将获取列表中的第一个元素。

<ul><c:forEach var="item" items="${items}"><li>${item}</li></c:forEach>
</ul>

在这个示例中,使用 <c:forEach> 标签迭代 items 列表中的元素,并将它们显示在无序列表中。

隐式对象

EL 提供了许多隐式对象,您可以在 JSP 页面中直接使用它们。这些隐式对象是预定义的,无需额外配置即可访问。以下是一些常用的 EL 隐式对象:

  • pageContext:表示页面上下文,可用于访问请求、响应和其他页面信息。
  • request:表示 HTTP 请求,可用于获取请求参数和属性。
  • response:表示 HTTP 响应,可用于设置响应属性。
  • session:表示用户会话,可用于在会话中存储和检索数据。
  • application:表示应用程序范围对象,可用于在整个应用程序中共享数据。

转义 HTML

EL 会默认转义输出,以防止跨站点脚本攻击(XSS)。这意味着如果您在 EL 表达式中包含 HTML 特殊字符,它们将被自动转义。例如,<> 将被转义为 &lt;&gt;

如果您需要在页面上显示 HTML 标记,可以使用 ${} 表达式的 fn:escapeXml 函数来取消转义,如下所示:

${fn:escapeXml("<strong>Hello, World!</strong>")}

调用方法

EL 还允许您调用 JavaBean 的方法。要调用方法,只需使用点号 . 语法,并在方法名称后面加上小括号 (),如下所示:

<p>The current date and time is: ${dateUtils.getCurrentDateTime()}</p>

在这个示例中,${dateUtils.getCurrentDateTime()} 将调用名为 getCurrentDateTime 的方法,并显示当前日期和时间。

在 JSP 页面中使用 EL

要在 JSP 页面中使用 EL,只需将 EL 表达式放在 ${} 中,并将它们嵌入到 HTML 或其他文本中。以下是一些示例,展示了如何在 JSP 页面中使用 EL:

<%-- 输出用户的姓名 --%>
<p>Welcome, ${user.name}!</p><%-- 获取用户的年龄并进行条件判断 --%>
<c:if test="${user.age == 18}">You are 18 years old!
</c:if><%-- 循环遍历列表中的元素 --%>
<ul><c:forEach var="item" items="${items}"><li>${item}</li></c:forEach>
</ul>

这些示例演示了如何在 JSP 页面中嵌入 EL 表达式,以便显示、比较和遍历数据。

EL 高级用法

除了基本用法之外,EL 还提供了许多高级功能,使其更强大和灵活。以下是一些 EL 的高级用法:

使用条件运算符

EL 支持条件运算符 ? :,允许您根据条件选择不同的值。例如,${user.gender == 'Male' ? 'Mr.' : 'Ms.'} 将根据用户的性别选择称谓。

<p>Hello, ${user.gender == 'Male' ? 'Mr.' : 'Ms.'} ${user.name}!</p>

访问数组和列表元素

EL 允许您访问数组和列表中的元素,并提供强大的功能来处理它们。您可以使用 [index] 来获取特定索引的元素,使用 firstlast 来检查是否是第一个或最后一个元素,以及使用 length 来获取数组或列表的长度。

<%-- 获取第一个和最后一个元素 --%>
<p>First item: ${items[0]}</p>
<p>Last item: ${items[fn:length(items) - 1]}</p><%-- 检查是否为空 --%>
<c:if test="${empty items}"><p>The list is empty.</p>
</c:if>

使用函数

EL 提供了许多内置函数,可以在 EL表达式中使用。这些函数允许您执行各种操作,从字符串操作到日期格式化,甚至是数学运算。以下是一些常用的 EL 内置函数:

  • fn:length():获取集合的长度。
  • fn:substring():截取字符串的子串。
  • fn:toUpperCase():将字符串转换为大写。
  • fn:toLowerCase():将字符串转换为小写。
  • fn:replace():替换字符串中的文本。
  • fn:split():将字符串拆分为子字符串。

例如,您可以使用 fn:length() 函数来获取列表的长度:

<p>The list has ${fn:length(items)} items.</p>

创建自定义函数

除了内置函数外,您还可以创建自己的自定义函数,以便在 EL 表达式中使用。为此,您需要创建一个 Java 类,并在其中定义您的自定义函数。然后,您可以将该类配置为 JSP 应用程序的一部分,以便在 EL 表达式中访问它。

下面是一个简单的示例,展示了如何创建和使用自定义 EL 函数:

package com.example;public class StringUtils {public static String reverse(String input) {StringBuilder result = new StringBuilder();for (int i = input.length() - 1; i >= 0; i--) {result.append(input.charAt(i));}return result.toString();}
}

在上述示例中,我们创建了一个名为 StringUtils 的 Java 类,其中包含一个名为 reverse 的自定义函数。这个函数用于反转输入的字符串。

要在 JSP 页面中使用这个自定义函数,您需要在 JSP 文件的顶部添加以下配置:

<%@ page language="java" import="com.example.StringUtils" %>

这将导入自定义函数所在的包。接下来,您可以在 EL 表达式中使用自定义函数,如下所示:

<p>Reversed string: ${StringUtils.reverse("Hello, World!")}</p>

在这个示例中,我们调用自定义函数 StringUtils.reverse 来反转字符串,并将结果显示在页面上。

使用 EL 进行表单处理

EL 在处理表单数据时非常有用。您可以使用 EL 来获取用户提交的表单数据,并在 JSP 页面上显示它们。

获取表单参数

要获取用户提交的表单参数,只需使用 ${param} 对象,后跟表单字段的名称。这将返回一个字符串,表示用户在表单字段中输入的值。

<form action="processForm.jsp" method="post"><input type="text" name="username" /><input type="password" name="password" /><input type="submit" value="Submit" />
</form><%-- 获取用户提交的用户名和密码 --%>
<p>Username: ${param.username}</p>
<p>Password: ${param.password}</p>

在这个示例中,我们创建了一个简单的登录表单,用户可以在其中输入用户名和密码。使用 ${param.username}${param.password},我们获取用户提交的值,并在页面上显示它们。

提交表单数据

EL 还可用于在表单处理期间将数据传递回服务器。要做到这一点,只需在表单字段的 name 属性中使用相应的属性名称,并使用 EL 表达式将值设置为属性的值。

<%-- 创建一个用户对象 --%>
<jsp:useBean id="user" class="com.example.User" scope="request" /><form action="processForm.jsp" method="post"><input type="text" name="user.username" value="${user.username}" /><input type="password" name="user.password" value="${user.password}" /><input type="submit" value="Submit" />
</form>

在这个示例中,我们创建了一个名为 user 的用户对象,它具有 usernamepassword 属性。在表单字段的 name 属性中,我们使用 user.usernameuser.password,这将把表单提交的值自动设置为用户对象的属性值。

总结

本博客涵盖了 Java JSP EL 表达语言的基础知识和高级用法。EL 提供了一种简洁和强大的方式来访问和处理数据,以创建动态的 Web 应用程序。无论是显示数据、进行条件判断还是处理表单数据,EL 都是 Java Web 开发中的强大工具。

在您的下一个 Web 项目中,不妨尝试使用 EL,看看它如何简化您的代码并提高可维护性。 EL 的语法简单直观,让您可以更轻松地将数据呈现在页面上。

无论是入门还是精通,EL 都是每个 JSP 开发人员应该熟练掌握的技能。希望这篇博客能够帮助您更好地理解和使用 Java JSP EL 表达语言。祝您编写出优雅而强大的Web应用程序!

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

关于卷积神经网络的多通道

多通道输入 当输入的数据包含多个通道时&#xff0c;我们需要构造一个与输入通道数相同通道数的卷积核&#xff0c;从而能够和输入数据做卷积运算。 假设输入的形状为n∗n&#xff0c;通道数为ci​&#xff0c;卷积核的形状为f∗f&#xff0c;此时&#xff0c;每一个输入通道都…

记CVE-2022-39227-Python-JWT漏洞

文章目录 前言影响版本漏洞分析Newstar2023 Week5总结 前言 在Asal1n师傅的随口一说之下&#xff0c;说newstar week5出了一道祥云杯一样的CVE&#xff0c;于是自己也是跑去看了一下&#xff0c;确实是自己不知道的一个CVE漏洞&#xff0c;于是就从这道题学习到了python-jwt库…

机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python 计算机竞赛

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…

在MacBook上实现免费的PDF文件编辑

之前我想对PDF文件进行简单处理&#xff08;比如删页面、添空白页、调整页面顺序&#xff09;&#xff0c;要么是开wps会员【花钱贵】&#xff0c;下载&#xff08;盗版&#xff09;Adobe Acrobat【macOS不好下载】&#xff0c;要么用福昕阅览器登陆学生账号&#xff08;学校买…

[React] React-Redux 快速入门

文章目录 1.安装 Redux Toolkit 和 React Redux2.创建 Redux Store3.为 React 提供 Redux Store​4.创建 Redux State Slice5.添加 Slice Reducers 到 Store6.在 React 组件中使用 Redux State 和 Actions​7.总结 1.安装 Redux Toolkit 和 React Redux npm install reduxjs/t…

KaiOS APN配置文件apn.json调试验证方法(无需项目全编)

1、KaiOS 的应用就类似web应用&#xff0c;结合文件夹路径webapp字面意思理解。 2、KaiOS APN配置文件源代码在apn.json&#xff0c; &#xff08;1&#xff09;apn.json可以自定义路径&#xff0c;通过配置脚本实现拷贝APN在编译时动态选择路径在机器中生效。 &#xff08;…

集合框架:List系列集合:特点、方法、遍历方式、ArrayList,LinkList的底层原理

目录 List集合 特有方法 遍历方式 1. 使用普通 for 循环&#xff1a; 2. 使用增强型 for 循环&#xff08;foreach&#xff09;&#xff1a; 3. 使用迭代器&#xff08;Iterator&#xff09;&#xff1a; 4. 使用 Java 8 的流&#xff08;Stream&#xff09;API&#xff…

Softing新版HART多路复用器现支持图尔克excom和西门子ET 200iSP等远程I/O

Softing工业自动化最近升级了用于访问配置和诊断数据的smartLink SW-HT软件&#xff0c;现在该软件可支持访问图尔克excom和西门子ET 200iSP等远程I/O。 &#xff08;smartLink SW-HT支持访问配置和诊断数据&#xff09; 越来越多的新型远程I/O选择使用以太网来替代PROFIBUS连接…

系列十一、拦截器(二)#案例演示

一、案例演示 说明&#xff1a;如下案例通过springboot的方式演示拦截器是如何使用的&#xff0c;以获取Controller中的请求参数为切入点进行演示 1.1、前置准备工作 1.1.1、pom <dependencies><!-- spring-boot --><dependency><groupId>org.spring…

分享一下怎么做小程序营销活动

小程序营销活动已经成为现代营销的必备利器&#xff0c;它能够帮助企业提高品牌知名度、促进产品销售&#xff0c;以及加强与用户的互动。然而&#xff0c;要想成功地策划和执行一个小程序营销活动&#xff0c;需要精心设计和全面规划。本文将为您介绍小程序营销活动的策划和执…

OpenSign 开源 PDF 电子签名解决方案

OpenSign 是一个开源文档电子签名解决方案&#xff0c;旨在为 DocuSign、PandaDoc、SignNow、Adobe Sign、Smartwaiver、SignRequest、HelloSign 和 Zoho Sign 等商业平台提供安全、可靠且免费的替代方案。 特性&#xff1a; 安全签名&#xff1a;利用最先进的加密算法来确保…

easyHttp -- 轻量级的 HTTP 客户端工具包

easyHttp gitte地址:easy-http 介绍 easyHttp 是一个轻量级的 HTTP 客户端工具包&#xff0c;专为 Java 设计&#xff0c;使得基本的 HTTP 请求变得异常简单。该库主要针对常见的 HTTP 请求提供了简洁的 API&#xff0c;使得开发者无需面对复杂的设置。当前版本已支持基本的请…

私有化部署大模型:5个.Net开源项目

从零构建.Net前后端分离项目 今天一起盘点下&#xff0c;10月份推荐的5个.Net开源项目&#xff08;点击标题查看详情&#xff09;。 1、BootstrapBlazor企业级组件库&#xff1a;前端开发的革新之路 BootstrapBlazor是一个用于构建现代Web应用程序的开源框架&#xff0c;它基…

Jmeter分布式压测 —— 易踩坑点

1、压测机 无论是从成本角度还是维护的难易方面&#xff0c;压测机的数量&#xff0c;适量就好。举个例子&#xff0c;8C16G的一台服务器&#xff0c;部署Jmeter后&#xff0c;根据我个人的测试比对数据&#xff0c;配置≤1500个线程数&#xff0c;最好。太多了性能损耗较大&a…

QT实现的一个MVP设计模式demo

最近做qt 项目,发现网上基于MVP设计模式的QT例程很少&#xff0c;这里写一个demo示例可作为参考&#xff1a; 一、简要概述 MVP是由MVC发展而来&#xff0c;总体目的与作用相同。都是为了软件构架有层次之分&#xff0c;使得核心逻辑、界面控制、数据这三者分层清晰明了。减少…

RabbitMQ 死信队列

在MQ中&#xff0c;当消息成为死信&#xff08;Dead message&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而在RabbitMQ中&#xff0c;由于有交换机的概念&#xff0c;实际是将死信发送给了死信交换机&#xf…

要在CentOS中安装Docker

Docker部署 在CentOS中安装Docker要在CentOS中安装Docker&#xff0c;请按照以下步骤进行操作&#xff1a;启动和校验常用命令查看容器启动容器 配置镜像加速 在CentOS中安装Docker 要在CentOS中安装Docker&#xff0c;请按照以下步骤进行操作&#xff1a; 首先&#xff0c;确…

apache-maven-3.6.3 安装配置教程

链接&#xff1a;https://pan.baidu.com/s/1RkMXipnvac9EKcZyUStfGQ?pwdl32m 提取码&#xff1a;l32m 1. 将 maven 压缩包解压至指定文件夹 2. 配置环境变量 &#xff08;1&#xff09;打开此电脑-> 鼠标右键选择属性->点击高级系统设置 &#xff08;2&#xff09;点…

软件测试简历这样写,一周能约七个面试

简历到底有多重要&#xff1f; 俗话说&#xff1a;“简历就是你能否进入一家公司的敲门砖”。面试官只有看到一份有质量的简历才会给你一个面试的机会。 很多人都会有这样的问题&#xff0c;为什么我投了那么多简历&#xff0c;都没有接到面试通知&#xff1f;也没有HR和我电…

“菊风Juphoon”邀您莅临11月22-24日CNF南京应急展消防展 | 展位号:115-1

公司简介 菊风依托互联网和电信网音视频融合技术积累&#xff0c;提供智能化的音视频统一通信产品及服务。面向应急管理、消防救援、智慧城市等多个领域&#xff0c;菊风推出适用于全网通的统一通信一体机、统一通信平台。 此外&#xff0c;菊风还提供视频能力平台&#xff0…