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)


相关推荐

  • 检测IE8及以下的浏览器并安装chrome frame插件

    检测IE8及以下的浏览器并安装chrome frame插件您使用的浏览器需要安装安全控件才能访问系统!点击下载欢迎访问XXX系统!

  • Matlab axis函数应用简介

    Matlab axis函数应用简介axis用于操作普通的坐标属性,(轴的缩放和外观)。axis([xminxmaxyminymax])设置当前坐标轴x轴和y轴的限制范围axis([xminxmaxyminymaxzminzmaxcmincmax])设置x,y,z轴的限制范围和色差范围。v=axis返回一个行向量,记录了坐标范围axisauto解除限…

  • RTP协议头详解

    RTP协议头详解1.RTP协议RTP:即可心跑在TCP也可以跑在UDP上,实时流协议,所以通常是跑在UDP上。前12个字节出现在每个RTP包中,仅仅在被混合器插入时,才出现CSRC识别符列表。各个域的含义如下所示:(1)版本(V):2比特,此域定义了RTP的版本。此协议定义的版本是2。(值1被RTP草案版本使用,值0用在最初”vat”语音工具使用的协议中。)(2)填充(P):1比特,若填料比特被设置,则此包包含一到多个附加在末端的填充比特,填充比特不算作负载的一部分。填

  • 免费服务器+免费域名 【白嫖手册】

    免费服务器+免费域名 【白嫖手册】前言 白嫖服务器方法 白嫖域名方法 准备工作:一台电脑 一个邮箱 一个QQ号 一个手机号 一毛钱1.白嫖服务器方法友链:免费主机

  • Radmin远程管理全解析

    Radmin远程管理全解析

  • 百度识图解析_蒙眼识字是什么原理

    百度识图解析_蒙眼识字是什么原理百度识图原理分析推测其发展方向    2010年12月13日,百度推出相似图片搜索功能—百度识图(shitu.baidu.com),常规的图片搜索,是通过输入关键词的形式搜索到互联网上相关的图片资源,而百度识图则能实现用户通过上传图片或输入图片的url地址,从而搜索到互联网上与这张图片相似的其他图片资源,同时也能找到这张图片相关的信息。     百度的相似图片搜索识图

发表回复

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

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