EL表达式语言_el表达式的语法格式

EL表达式语言_el表达式的语法格式EL表达式语言1.El简介EL(ExpressionLanguage,表达式语言)是一-种简单的语言,可以方便地访问和处理应用程序数据,而无需使用JSP脚本元素(Scriptlet)或JSP表达式。EL最初是在标准标签库JSTL(JavaServerPageStandardTagLibrary)1.0中定义,从JSTL1.1开始,SUN公司将EL…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

EL表达式语言

1. El简介

  • EL ( Expression Language ,表达式语言)是一-种简单的语言, 可以方便地访问和处理应用程序数据,而无需使用JSP脚本元素( Scriptlet )或JSP表达式。

  • EL最初是在标准标签库JSTL ( JavaServer Page Standard TagLibrary ) 1.0中定义,从JSTL 1.1开始, SUN公司将 EL表达式语言从JSTL规范中分离出来,正式独立为JSP 2.0标准规范之一。因此,只要是支持Servlet 2.4、JSP 2.0 以上版本的Web容器,都可以在JSP网页中直接使用EL.

2. El的启用

  • EL在容器默认配置下处于启用状态,每个JSP页面也可以通过page指令的isELIgnored属性单独设置其状态。<%@page isELIgnored = “true| false” %

3. EL的优点

  • EL表达式语言最大的优势是可以访便的访问JSP的隐含对象和JavaBean组件,完成使用”<% %>“或”<%= %>”完成的功能,使JSP页面从HTML代码中嵌入Java代码的混乱结构得以改善,提高了程序的可读性和易维护性。
  • 可以访问JSP的内置对象( pageContext、request、 session、 application等 ) ;
  • 简化了对JavaBean、 集合的访问方式;
  • 可以对数据进行自动类型转换;
  • 可以通过各种运算符进行运算;
  • 可以使用自定义 函数实现更加复杂的业务功能。

4. EL的语法

${ 
   表达式}

表达式可以是常量,变量,el隐含对象,el运算符和el函数

${ 
   "hello"} //输出字符串常量
${ 
   23.5} //输出浮点数常量
${ 
   23+ 5} //输出算术运算结果
${ 
   23> 5} //输出关系运算结果
${ 
   23||5} //输出逻辑运算结果
${ 
   23> 5?23:5} //输出条件运算结果
${ 
   empty username} //输出empty运算结果
${ 
   username} //查找输出变量值
${ 
   sessionScope.user.sex} //输出隐含对象中的属性值
${ 
   qst:fun(arg)} //输出自定义函数的返回值

4.1 EL常量

  • EL表达式中的常量包括:布尔常量、整形常量、浮点数常量、字符串常量和NULL常量。
  • 布尔常量,用于区分事物的正反两面,用true或false表示。例如: ${true}。
  • 整型常量,与Java中定义的整型常量相同,范围为Long.MIN VALUE到
    Long.MAX
    VALUE之间。例如: ${23E2}。
  • 浮点数常量,与Java中定义的浮点数常量相同,范围为Double.MIN VALUE到
    Double.MAX
    _VALUE之间。例如: ${23.5E-2}。
  • 字符串常量 ,是用单引号或双引号引起来的一连串字符。例如: ${” 你好!”}。
  • NULL常量,用于表示引|用的对象为空,用null表示,但在EL表达式中并不会输出”null”而是输出空。例如: ${null} ,页面会什么也不输出。

4.2EL变量

  • EL表达式中的变量不同于JSP表达式从当前页面中定义的变量进行查找,而是由EL引擎调用PageContext.findAttribute(String)方法从JSP四大作用域范围中查找。

  • 例如: ${username} ,表达式将按照page、request、 session.application范围的顺序依次查找名为username的属性;假如中途找到,就直接回传,不再继续找下去;假如全部的范围都没有找到, 就回传null。

  • 在使用EL表达式访问某个变量时,应该指定查找的范围,从而避免在不同作用范围中有同名属性的问题,同时也提高了查询效率。

  • EL 中的变量除了要遵循Java变量的命名规范外,还需注意不能使用EL中的保留字。

  • EL中预留的保留字:
    and or not empty div mod instance of eq ne It gt le ge true false null

4.3 EL中的 . 和 [ ] 操作符

对于常见的对象属性、集合数据的访问, EL提供了两种操作符:操作符 ” . “和” [ ] ” 操作符:

  • “.” 操作符,与在Java代码中一样, L表达式也可使用点操作符来访问对象的某个属性。
    例如,访问JavaBean对象中的属性对象中的属性:

     ${ 
         productBean.category.name} ,
    

    其中productBean为一个JavaBean对象 ,category为productBean中的一个属 性对象, name为category对象的一个属性。

  • “[ ]”操作符,用与点操作符类似,也用于访问对象的属性,属性需使用双弓|号括起来。

    ${ 
         productBean["category"]["name"] }
    
    • 当属性中包含了特殊字符,如:“.” 或“-“等并非字母或数字的符号,就一定要用“ [ ] ”操作符,例如:

      ${ 
             header["user-agent"]}
      
    • “[ ]”操作符可以访问有序集合或数组中的指定索引位置的某个元素,例如${array[0]};

    • “[ ]” 操作符可以访问Map对象的key关键字的值,例如:${map[“key”]} ;

    • 注意”[ ]”操作符和点操作符可以结合使用,例如: ${users[0].username}。

4.4 EL的错误处理机制

  • 作为表现层的JSP页面的错误处理,往往对用户会有直观的体现,为此EL提供了比较友好的处理方式:不提供警告,只提供默认值和错误,默认值是空字符串,错误是抛出一个异常。
  • EL对以下几种常见错误的处理方式:
    ■在EL中访问一个不存在的变量,则表达式输出空字符串,而不是输出”null”;
    ■在EL中访问-一个不存在对象的属性,则表达式输出空字符串,而不会抛出NullPointerException异常;
    ■在EL中访问一一个存在对象的不存在属性,则表达式会抛出PropertyNotFoundException异常。

5. EL的隐含对象

与JSP提供的内置对象目的相同,为了更加方便的进行数据访问, EL表达式也提供了-系列可以直接使用的隐含对象。
在这里插入图片描述

5.1与范围有关的隐含对象

在JSP中有四种作用域(页面域、请求域、会话域、应用域) , EL表达式针对这四种作用域提供了相应的隐含对象用于获取各作用域范围中的属性。

  • pageScope :用于获得页面作用范围中的属性值,相当于pageContext.getAttribute()

  • requestScope : 用于获得请求作用范围中的属性值,相当于request.getAttribute()

  • sessionScope : 用于获得会话作用范围中的属性值,相当于session.getAttribute()

  • applicationScope : 用于获得应用程序作用范围中的属性值,相当于application.getAttribute()

    //EL: 获取session域中存放的user的性别属性
    ${ 
         sessionScope.user.sex}
    
    // jsp脚本 : 
    <%
    User user = (User)session.getAttribute("user");
    String sex = user.getSex0;
    out.print(sex);
    %>
        
    //由上述JSP脚本代码与EL的对比可以看出, EL自动完成了类型转换和数据输出功能,并且大大简化了代码量
    
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <% session.setAttribute("myusername","zfc" );
         pageContext.setAttribute("sex","男" );
      %>
      <body>
      ${sessionScope.myusername}
      ${pageScope.sex}
       
      </body>
    </html>
    

5.2 与请求参数有关的隐含对象

  • 请求参数的获取也是JSP开发中常见的操作, EL表达式对此也提供了相应的隐含对象:
    param : 用于获得请求参数的单个值,相当于request.getParameter()
    paramValues : 用于获得请求参数的一组值,相当于request.getParameterValues()

    index.jsp ( web03项目名称)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>

  <body>
   ${param.name}
  </body>
</html>

测试 : localhost:8080/web03/index.jsp?name=zhangsan

页面会打印zhangsan

5.3 其他隐含对象

  • pageContext :相当于JSP页面中的pageContext对象,用于获取ServletContext、request、response、session等 其它JSP内置对象
  • header : 用于获得HTTP请求头中的单个值,相当于request.getHeader(String name)
  • headerValues: 用于获得HTTP请求头中的一组值,相当于request.getHeaders(String name)
  • cookie: 用于获得指定的Cookie
  • initParam: 用于获得上下文初始参数,相当于aplication.getInitParameter(String name)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
 <% 
     Cookie cookie = new Cookie("login","zhangsan" ); 
  %>
  <body>
    项目名 : ${pageContext.request.contextPath}  //   (/web03)
    cookie 名:${cookie.login.name}
    cookie 值:${cookie.value}
  </body>
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/164762.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 基于云计算的大数据平台基础设施建设实践

    基于云计算的大数据平台基础设施建设实践大数据平台基础建设当前的趋势是云化与开放,这个平台需要可以提供各类大数据相关PaaS服务,也需要使各类服务间可以简单灵活的组合来满足多变及定制的需求。如何在云上提供弹性、敏捷,却不失稳定和高性能的大数据平台?如何高效的利用云计算的特点来开发大数据平台?本期青云QingCloud系统工程师周小四给大家带来基于云计算的大数据平台基础设施建设以及其架构特点的主题分享。以下是分享原文。——————大…

  • Nginx(一):Nginx原理概述 与 安装步骤详解

    Nginx(一):Nginx原理概述 与 安装步骤详解

  • wireshark抓包工具详细说明及操作使用_wireshark ping抓包

    wireshark抓包工具详细说明及操作使用_wireshark ping抓包wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的

  • centos7 top命令_linux系统top命令

    centos7 top命令_linux系统top命令top命令Linuxtop命令用于实时显示process的动态。top参数详解第一行,任务队列信息**系统当前时间:**13:52:56**系统开机后到现在的总运行时间:**up66

  • 二叉树的中序遍历非递归算法java_二叉树遍历例题解析

    二叉树的中序遍历非递归算法java_二叉树遍历例题解析*非递归算法思想:  (1)设置一个栈S存放所经过的根结点(指针)信息;初始化S; (2)第一次访问到根结点并不访问,而是入栈;  (3)中序遍历它的左子树,左子树遍历结束后,第二次遇到根结点,就将根结点(指针)退栈,并且访问根结点;然后中序遍历它的右子树。 (4)当需要退栈时,如果栈为空则结束。     代码实现:void…

  • 大端存储模式和小端存储模式_vs2013大端小端如何设置

    大端存储模式和小端存储模式_vs2013大端小端如何设置首先要记住:读数据永远是从低地址开始的!!!正文开始什么是低地址、高地址?地址编号小的是低地址,地址编号大的是高地址什么是数据的低位、高位?小端模式数据的低位放在低地址空间,数据的高位放在高地址空间简记:小端就是低位对应低地址,高位对应高地址存放二进制数:1011-0100-1111-0110-1000-1100-0001-0101注意注意:我们在存放的时候是以一个存储单元为单位来存放,存储单元内部不需要再转变顺序啦!!就例如下面的低位0001-0101存放在0号地址,我们不需要.

    2022年10月22日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号