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>

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HTTP的请求方法OPTIONS

    HTTP的请求方法OPTIONS

    2021年10月13日
    59
  • navcat15激活码(JetBrains全家桶)

    (navcat15激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html4M7HSKPBXS-eyJsa…

    2022年3月29日
    173
  • ID卡(工卡)复制到手机NFC「建议收藏」

    ID卡(工卡)复制到手机NFC「建议收藏」1.很多单位的工卡都是ID卡,而读卡机,一般是多频的,支持多种卡,那么如何把ID卡写到手机NFC中,实现“忘带卡自由”呢?2.前提条件:用手机NFC,在单位的刷卡机上刷卡,提示“非法卡”。说明打卡机支持NFC,如果不支持,请略过本文3.在单位的打卡机上正常刷卡,屏幕上会提示卡号。或者有的工卡上带卡号,一般ID卡号是00开头或000开头的10位卡号。如果不是,说明不是ID卡,请略过本文。有的单位的人事系统里也会记录员工的物理ID卡号。或者用其他读卡器读ID卡,也能读到卡号。4.获取到ID物理卡号后

    2022年5月1日
    1.6K
  • http://95u.free.fr/index.php,Electronic Software Distribution Service

    http://95u.free.fr/index.php,Electronic Software Distribution ServiceContent-Type:multipart/related;start=;boundary=———-OH5LlQ9dynBJGqR8E2AiMRContent-Location:https://software.pitt.edu/software/software.aspSubject:=?utf-8?Q?Electronic=20Software=20Distributi…

    2022年7月24日
    6
  • Java实现时间动态显示方法汇总

    这篇文章主要介绍了Java实现时间动态显示方法汇总,很实用的功能,需要的朋友可以参考下本文所述实例可以实现Java在界面上动态的显示时间。具体实现方法汇总如下:1.方法一用TimerTask:

    2021年12月27日
    40
  • 宋宝华: 纪念金庸先生——程序员的武侠世界

    在漫天的星河中,有这样一颗星,他朴实无华,却又熠熠生辉,照亮了无数人的人生。他就是金庸先生。随着一代大侠的驾鹤西去,“飞雪连天射白鹿,笑书神侠倚碧鸳”,成为绝响。 每一个…

    2022年4月17日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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