【Java Web】EL表达式解析与应用指南

581 阅读2分钟

一、前言

在本文中,我们将探讨EL(Expression Language)表达式,这是一种用于简化JSP的输出的语言。EL表达式允许我们轻松地在JSP页面中嵌入和操作数据。本文将介绍EL表达式的基本语法、作用域对象、输出参数值以及一些示例。


二、内容

2.1 什么是 EL 表达式

EL(Expression Language)是一种用于简化JavaServer Pages(JSP)的输出的表达式语言。它允许我们轻松地在JSP页面中插入和操作数据,而不需要编写复杂的Java代码。

背景

在传统的JSP中,为了在页面中显示数据,通常需要使用Java代码来访问模型对象,然后将数据插入HTML代码中。这会导致JSP页面中充斥着大量的Java代码,降低了页面的可读性和维护性。为了解决这个问题,JSP引入了EL表达式。

EL表达式是JSP 2.0引入的技术规范,全称为"Expression Language",灵感来源于ECMAScriptXPath表达式语言。它提供了一种简单的语法,以便在JSP中表达和处理表达式,从而减少JSP页面中的Java代码,使页面更加简洁、易于开发和维护。


2.2 EL表达式基本语法

EL表达式的基本语法非常简单,它使用${}来包裹表达式。这使得在JSP页面中插入和操作数据变得非常方便。允许我们从各种数据源中提取数据,并在页面上输出或进行简单的操作。

举一个例子,比如现在有一个JavaBean类,表示一个学生的信息,类似这样:

image-20231025073003169.png

现在,我们写一个 Servlet,并将请求转发给 info.jsp:

image-20231025073047218.png

之前,我们在 info.jsp 中可能会这样输出:

image-20231025073515058.png

效果如下:

image-20231025074638065.png

现在有了 El 表达式,我们可以这样输出内容(编写 el_info):

image-20231025074501131.png

甚至连导包语句import="el.Student" 都可以不用写

现在,我们在之前的 Servlet 中修改一下请求转发:

request.getRequestDispatcher("/el_info.jsp").forward(request, response);

好了,现在访问新页面,效果如下:

image-20231025074525769.png

确实很简单。

EL表达式在输出String类型的对象时,如果该对象为null,通常会将其输出为空字符串而不是"null"。

EL表达式可以嵌套,并支持各种数据类型。EL表达式的主要目的是从不同的作用域对象中获取属性值,并执行一些简单的操作。

EL表达式支持将表达式的运算结果进行输出。它可以输出绝大多数对象,本质上是执行对象的toString()方法。

比如:

${title} <!-- 输出title变量的值 -->
${requestScope.student.name} <!-- 输出请求作用域中student对象的姓名属性 -->
${emp.salary + 300} <!-- 输出emp对象的工资属性增加300后的值 -->
${1 <= 3 && 2 > 4} <!-- 输出布尔值,判断1是否小于等于3并且2是否大于4 -->

2.3 作用域对象

EL表达式内置了四种作用域对象,它们用于访问不同范围内的属性值。当我们省略作用域对象时,EL会按照作用域从小到大的顺序尝试获取属性值。以下是这些作用域对象的描述:

  • pageScope: 从当前页面获取属性值。
  • requestScope: 从当前请求中获取属性值。
  • sessionScope: 从当前会话中获取属性值。
  • applicationScope: 从当前应用获取全局属性值。

举例来说,如果您有一个名为student的属性,您可以通过以下方式获取它的值:

${student.name}

EL表达式非常灵活,您可以轻松地访问不同作用域中的属性。我们可以使用范围作为前缀明确指定要查找的变量所在的作用域,例如${requestScope.userinfo}表示访问requestScope范围中的userinfo变量。

在开发中,我们提倡添加作用域对象为前缀,即使EL会按照作用域从小到大的顺序尝试获取属性值。


2.4 EL表达式的输出参数值

EL表达式还内置了param对象,用于简化参数的输出。这对于从HTTP请求中获取参数值非常有用。

我们可以使用${param.参数名}来获取特定参数的值。

${param.参数名}

假设你有一个JSP页面,URL参数中包含一个名为"username"的参数,你想在页面上显示这个参数的值。你可以使用${param.username}来实现这一目的:

<!DOCTYPE html>
<html>
<head>
    <title>获取HTTP参数</title>
</head>
<body>
    <h1>欢迎,${param.username}!</h1>
</body>
</html>

如果你的URL是 http://example.com/mypage.jsp?username=JohnDoe,那么${param.username}将获取**"JohnDoe"并在页面上显示"欢迎,JohnDoe!"**。


三、总结

总的来说,EL表达式是Java web开发中的一个工具,它简化了JSP页面中的数据操作和输出。它可以从不同的作用域对象中获取属性值,执行运算并输出结果。作用域对象包括pageScoperequestScopesessionScopeapplicationScope,每个用于不同级别的数据管理。此外,EL表达式还提供了param对象,用于轻松获取HTTP请求中的参数值。