首页 > 编程语言 >【Java Web】EL表达式

【Java Web】EL表达式

时间:2024-11-12 16:47:51浏览次数:3  
标签:Web Java EL 作用域 运算符 user news 表达式

文章目录


举例一个简单的用户信息展示场景,包含用户的姓名和年龄。

下面分别用 JSP 脚本和 EL 表达式两种方式实现这个功能。

使用 JSP 脚本

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.*" %>
<html>
    <head><title>用户信息</title></head>
    <body>
        <%
        Map<String, Object> user = new HashMap<>();
        user.put("name", "张三");
        user.put("age", 25);
        request.setAttribute("user", user);
        %>
        <p>用户名: <%= ((Map)request.getAttribute("user")).get("name") %></p>
        <p>年龄: <%= ((Map)request.getAttribute("user")).get("age") %></p>
    </body>
</html>

创建Map模拟用户数据,并将其作为请求属性设置。然后使用 <%= ... %> 语法从Map中获取并显示用户的姓名和年龄。

使用 EL 表达式

isELIgnored="false" 开启 EL 表达式(idea2023自动开启)

<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<%@ page import="java.util.*" %>
<html>
    <head><title>用户信息</title></head>
    <body>
        <%
        Map<String, Object> user = new HashMap<>();
        user.put("name", "张三");
        user.put("age", 25);
        request.setAttribute("user", user);
        %>
        <p>用户名: ${user.name}</p>
        <p>年龄: ${user.age}</p>
    </body>
</html>

该例同样设置了用户数据为请求属性,但使用了 ${...} 这样的EL表达式来引用这些属性。

EL表达式

EL(Expression Language)表达式是JavaServer Pages (JSP) 技术的一部分,它提供了一种方便的方法来访问和处理存储在JavaBeans组件中的数据。使用EL表达式的优点包括简化页面上的代码、提高可读性以及更好地分离业务逻辑与表示层。

EL 表达式标准格式:${expression}

  • expression 可以是任何有效的表达式,包括变量、方法调用等。
操作符描述示例
点操作符(.访问对象的属性${news.title}
方括号操作符([]访问对象的属性
访问属性或集合元素
${news["title"]} == ${news.title}
${newsList[0]} & ${map['key']}

EL严格区分大小写,严格按规范书写,养成良好编码习惯

运算符

EL 不仅提供了访问和操作数据的方法,还包含了一系列运算符来支持基本的算术、比较和逻辑操作。这些运算符使得可以在 JSP 页面中直接进行简单的计算和条件判断。

运算符说明
( )改变执行的优先级,例如 ${3\*(4+5)}
+,-,*,/,%算术运算符
==,!=,>,>=,<,<=关系运算符
&&,||,!逻辑运算符
?:条件运算符,例如 ${a>b?1:2}
empty,not empty用来检查变量是否(不)为空或null,例如 ${empty user.name}
in,not in检查左边的操作数是否(不)是右边集合的一个元素,例如 ${'admin' in roles}

为了避免 JSP 混淆运算符和页面关键字,很多运算符都有替代写法。

关系运算符范例结果
== 或 eq 5 = = 5 或 {5 == 5}或 5==5或{5 eq 5}true
!= 或 ne 5 ! = 5 或 {5 != 5}或 5!=5或{5 ne 5}false
< 或 lt 3 < 5 或 {3 < 5}或 3<5或{3 lt 5}true
> 或 gt${3 > 5}或{3 gt 5}false
<= 或 le 3 < = 5 或 {3 <= 5}或 3<=5或{3 le 5}true
>= 或 ge 3 > = 5 或 {3 >= 5}或 3>=5或{3 ge 5}false
逻辑运算符范例
&& 或 and${user.age >= 18 && user.isAdmin == true}
||或 or${user.isAdmin == true || user.isModerator == true}
! 或 not${!empty user.name}

错误示范

${param.password1} == ${param.password2} 
${ ${param.password1 } == ${ param.password2 } }
  • 分别解析 ${param.password1}${param.password2} 为字符串,且 == 将被视为纯文本而不是比较运算符
  • EL 表达式不允许嵌套使用花括号 {}

正确示例

在 JSP 页面中根据密码是否匹配来执行某些逻辑,可使用 <c:if> 标签结合 EL 表达式实现

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head><title>密码比较示例</title></head>
    <body>
        <c:if test="${param.password1 == param.password2}">
            <p>两次输入的密码一致。</p>
        </c:if>
        <c:if test="${param.password1 != param.password2}">
            <p>两次输入的密码不一致,请重新输入。</p>
        </c:if>
    </body>
</html>

EL功能

获取对象属性

使用EL表达式可以直接访问JavaBean对象的属性,前提是该对象已经通过某种方式(如request.setAttributesession.setAttributeapplication.setAttribute)设置到了作用域中。

${bean.propertyName}
<%
    News news = new News();
    news.setTitle("今日新闻");
    request.setAttribute("news", news);
%>
<p>新闻标题: ${news.title}</p>

获取集合元素

对于数组、列表和映射,可以通过索引来访问特定的元素。

  • 数组/列表:

    ${list[0]}
    
  • 映射:

    ${map['key']}
    
<%
    List<String> list = Arrays.asList("第一条新闻", "第二条新闻");
    Map<String, String> map = new HashMap<>();
    map.put("first", "第一条新闻");

    request.setAttribute("list", list);
    request.setAttribute("map", map);
%>

<p>列表中的第一条新闻: ${list[0]}</p>
<p>映射中的第一条新闻: ${map['first']}</p>

数据处理运算

EL支持基本的算术运算符,可以用来进行简单的计算。假设需要计算总页数:

<%
    int totalRecordCount = 100;
    int pageSize = 10;
    request.setAttribute("totalRecordCount", totalRecordCount);
    request.setAttribute("pageSize", pageSize);
%>

<p>总页数: ${totalRecordCount / pageSize}</p>

屏蔽常见异常

如果尝试访问一个不存在的属性或空对象,EL默认不会抛出异常,而是返回空字符串或null。这有助于提高程序的健壮性。

<% // 没有设置username %>
<p>用户名: ${username}</p>
<!-- 输出为空 -->

自动类型转换

EL会根据上下文自动进行类型转换。例如,如果从作用域中获取的对象是News类型,那么${news}会自动转换为News类型的对象。

<%
    News news = new News();
    news.setTitle("今日新闻");
    request.setAttribute("news", news);
%>
<% // 相当于 (News) request.getAttribute("news") %>
<p>新闻对象: ${news}</p>
<!-- 这里通常会输出news对象的toString()方法的结果 -->

EL访问作用域

作用域Java代码取值EL取值
请求作用域request.getAttribute(“news”);${ requestScope.news }
会话作用域session.getAttribute(“username”);${ sessionScope.username }
程序作用域application.getAttribute(“count”);${ applicationScope.count }
页面作用域pageContext.getAttribute(“userNum”);${ pageScope.userNum }

标签:Web,Java,EL,作用域,运算符,user,news,表达式
From: https://blog.csdn.net/m0_66584716/article/details/143716673

相关文章

  • 【Java】Java读写Excel文件
    常见的JavaExcel操作方法Java中常用的Excel操作方式有什么呢?ApachePOIEasyExcel这两种方法有什么区别和联系?ApachePOI是一个用于操作MicrosoftOffice格式文件(如Excel、Word等)的Java库。它提供了一系列的API来读写Excel文件。POI的基本功能如下:结构说......
  • Elasticsearch简介
    前言什么是搜索引擎搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上采集信息,在对信息进行组织和处理后,为用户提供检索服务,将检索的相关信息展示给用户的系统。分类:全文索引搜索引擎采集ip段内的网页数据,扫描网页内容的每一个词,对其创建索引,指明词......
  • WebGIS开发及二三维GIS开发框架对比分析
    GIS(地理信息系统)前端开发是GIS应用开发的重要组成部分,随着WebGIS技术的发展,前端开发在地图应用中的作用愈加重要。本文将介绍GIS前端开发的基本计划以及市面上各种二三维GIS开发框架的对比分析。WebGIS开发基础1.了解GIS基础知识GIS前端开发需要掌握GIS基础知识,如地图投......
  • 【MonitorUtil】java报错日志工具类
     自定义报警日志打印工具importorg.apache.commons.lang.StringUtils;importjava.io.PrintWriter;importjava.io.StringWriter;/***自定义报警日志打印工具**@authorAngel挤一挤*@date2022/12/13*/publicclassMonitorUtil{/***......
  • 《Java核心技术 卷I》图形用户界面使用字体
    使用字体字体名(fontfacename)指定一种字体,字体名由字体族名(fontfamilyname)和一个可选的后缀(如果"Bold")组成,例如,“Helvetica”和"HelveticaBold"都属于名为“Helvetica”字体族的字体。要想知道某台特定计算机上可用的字体,可以调用GraphicsEnvironment类的getAvaila......
  • 深入 Java 多线程:解锁并发编程的奥秘
    在当今的软件开发世界中,性能和高并发是衡量一个应用程序成败的关键因素。无论是处理高流量的网络请求、执行复杂的数据分析任务,还是管理后台服务中的资源,Java多线程编程都是开发者必备的技能之一。本文将带领你深入Java多线程的世界,解锁并发编程的奥秘。1.并发与并行的区......
  • PowerShell 重命名文件夹及删除空文件夹
    数据来源$urldata中的倒数第2列(子文件夹名称列)包含/、\等特殊字符某个文件夹重命名脚本foreach($iin0..100){#提取路径部分$basePath=($urldata[$i].split("`t")[-1]).trim()$subPath=($urldata[$i].split("`t")[-2].replace('"','')......
  • Shiftdel walkthrough Intermediate
    点击查看代码nmap-p--A192.168.167.174StartingNmap7.94SVN(https://nmap.org)at2024-11-1200:09UTCNmapscanreportfor192.168.167.174Hostisup(0.071slatency).Notshown:65532closedtcpports(reset)PORTSTATESERVICEVERSION22/tcpop......
  • 2.基本的SELECT语句
    #列出数据库showdatabases;#创建数据库createdatabasedbtest;1.SQL分类DDL:数据定义语言CREATE、DROP、ALTER、RENAME、TRUNCATEDML*:数据操作语言INSERT、DELETE、UPDATE、SELECTDCL:数据控制语言GRANT、REVOKE、ROLLBACK、COMMIT、SAVEPOINT2.导入数据方式一:基......
  • elementUI中时间控件,设置范围一个月的方法
    <template><el-date-pickerstyle="width:260px;"V-model="timeRange"type="daterange"range-separator="value-format="yyyy-MM-dd"start-placeholder="开始日期"end-pla......