浅谈JSP之EL表达式

举报
运气男孩 发表于 2021/12/03 23:58:54 2021/12/03
【摘要】 简介以MVC模式设计程序,JSP只是视图,视图的任务就是显示响应,而不是在JSP中做任何关于程序控制和业务逻辑的事情。所以在JSP页面中应该尽可能少的、或者是完全不出现Java代码。在使用JSP标准动作操作 JavaBean时,如果JavaBean的属性是 String类型或者基本类型,则能够实现类型的自动转换,如 JavaBean的属性从String类型可自动转换成int类型。如果 Jav...

简介

MVC模式设计程序,JSP只是视图,视图的任务就是显示响应,而不是在JSP中做任何关于程序控制和业务逻辑的事情。所以在JSP页面中应该尽可能少的、或者是完全不出现Java代码。
在使用JSP标准动作操作 JavaBean时,如果JavaBean的属性是 String类型或者基本类型,则能够实现类型的自动转换,如 JavaBean的属性从String类型可自动转换成int类型。如果 Javabean中的属性不是 String类型和基本类型,而是一个 Object类型,并且属性还有自己的属性,如何获得此 Object类型的属性呢?JSP标准动作中没有提供这种嵌套式访问机制,所以要想实现这个功能,就只能在JSP页面中通过Java代码来读取 Object类型的属性。从JSP2.0之后,可以使用EL表达式来处理这样的的问题。
所以, EL是JSP 2.0增加的技术规范,其全称是表达式语言(Expression Language)。EL语言的灵感来自于ECMAScript和XPath表达式语言。EL表达式语言是一种简单的语言,提供了在JSP中简化表达式的方法,目的是为了尽量减少JSP页面中的Java代码,使得JSP页面的处理程序编写起来更加简洁,便于开发和维护。

优势

EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。

EL的基本语法

在JSP中访问模型对象是通过EL表达式的语法来表达。所有EL表达式的格式都是以“${}”表示。例如,${ userinfo}代表获取变量userinfo的值。当EL表达式中的变量不给定范围时,则默认在page范围查找,然后依次在request、session、application范围查找。也可以用范围作为前缀表示属于哪个范围的变量,例如:${ pageScope. userinfo}表示访问page范围中的userinfo变量

它以“${”开头,以“}”结束,中间为合法的表达式,具体的语法格式如下:

${expression}

当JSP编译器在属性中见到"${}"格式后,它会产生代码来计算这个表达式,并且产生一个替代品来代替表达式的值。

EL表达式输出字符串内容

${'华为云社区'}

EL访问数据

[ ]与.运算符

EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:
${ user. My-Name}应当改为${user["My-Name"]}
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量
注意:使用“[ ]”操作符时,“[ ]”中必须包含有 " " 双引号(操作数组也可以写成${ list["0"] },等价于${ list[0] })。另外,EL的“[ ]”运算符还有一个用途,就是用来获取数组或者List集合中的数据。
示例:使用EL表达式访问人员信息数据。

变量

EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传。EL表达式的属性如下:
示例:使用EL表达式在三个属性范围内取数据值
<%@ page import="com.hbnu.EL.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/12/1
  Time: 17:20
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式</title>
</head>
<body>
<%
    request.setAttribute("name","生如夏花");

%>
<h3>使用EL表达式获取request域中的数据:${name}</h3>
<hr>
<%
    Person person =new Person();
    person.setUsername("运气男孩");
    person.setAge(21);
    request.setAttribute("person",person);
%>
<h4>使用EL表达式获取JavaBean对象中的数据:${person.username}今年${person.age}岁</h4>
<hr>
<%
    List<String> list =new ArrayList<>();
    list.add("华为云");
    list.add("666");
    request.setAttribute("role",list);
%>
<h4>使用EL表达式获取list集合里的数据:${role[1]}</h4>
</body>
</html>

可以看到,正常取出数据值

EL的小特性

1)EL可以与JSTL结合使用,也可以与JavaScript语句结合使用。

(2)EL中会自动进行类型转换。如果想通过EL输入两个字符串型数值(例如,number1和number2)的和,可以直接通过+号进行连接(例如,${number1+number2})。

(3)EL不仅可以访问一般变量,而且还可以访问JavaBean中的属性以及嵌套属性和集合对象。

(4)在EL中可以执行算术运算、逻辑运算、关系运算和条件运算等。

(5)在EL中可以获得命名空间(PageContext对象,它是页面中所有其它内置对象的最大范围的集成对象,通过它可以访问其它内置对象)。

(6)在使用EL进行除法运算时,如果0作为除数,则返回无穷大Infinity,而不返回错误。

(7)在EL中可以访问JSP的作用域(request、session、application以及page)。

(8)扩展函数可以与Java类的静态方法进行映射。


隐含对象

在EL中,提供了6个访问环境信息的隐含对象,其中许多对象在 JSP scriplet 和表达式中可用:

注意在应用param和paramValues隐含对象时,如果指定的参数不存在,则返回空字符串,而不是返回null。

总结:这里EL表达式的基础基本过了一遍,它可以搭配JSTL高级标签库使用,会有更好的效果。EL表达式还可以定义和 使用函数,有运算符和关键字,还可以用来判断对象是否为空,也可以低版本兼容和禁用EL等等,感兴趣的朋友可以深入了解一下,这里只是浅谈EL表达式的基础。

感恩能与大家在华为云遇见!希望能与大家一起在华为云社区共同成长。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。