EL表达式基础语法总结

一、EL表达式概述

JSP主要的作用是实现动态页面,而动态页面中最主要的作用就是把数据动态显示。
目前,JSP中显示数据主要用表达式实现,即<%=%>可以说,EL (Expression Language)表达式语言,就是用来替代<%=%>的,EL比<%=%>更简洁,更方便。

二、EL表达式基本语法

  • EL的基本语法是$ { }结束
    例如:输出名字是username的请求参数

    ${param.username} 
    

    param是EL中的内置对象表达式:

    <%=request.getParameter(“username")%>
    
  • 除了语法不同EL更为“贴心”,当username为null时,EL就不显示。而表达式会显示null

  • 与JSP表达式区别:JSP中使用的变量是脚本变量,而EL中的变量都是作用域变量,要操作的变量都在作用域中。

  • EL表达式是可以替代JSP页面中数据访问时的复杂编码可以自动转换类型,并且使JSP的开发变得更加简单。

  • 在Servlet或JSP中保存数据request.setAttribute(“username”,“LiYang”);
    在JSP中访问数据姓名:${username}

  • 按照 page →request → session →application的作用域顺序依次查找,找到即返回,最终找不到返回null。

三、内置对象

隐含对象描述
pageScopepage 作用域
requestScoperequest 作用域
sessionScopesession 作用域
applicationScopeapplication 作用域
paramRequest 对象的参数,字符串
paramValuesRequest对象的参数,字符串集合
headerHTTP 信息头,字符串
headerValuesHTTP 信息头,字符串集合
initParam上下文初始化参数
cookieCookie值
pageContext当前页面的pageContext
  • EL中有两个与请求参数有关的内置对象
    • param用来输出请求参数的值,格式为$ {param.请求参数名字},如下代码所示:

      使用表达式:

      <%=reqest.getParameter("name")%>
      

      使用EL:

      ${param.name}
      
    • paramValues:用来获取一对多的参数值,返回一个数组。比如某请求参数是通过checkbox传递的,名字为hobbies,要输出所有hobbies值中的第一个值,可以使用如下两种方式:
      使用表达式:

      <%=request.getParameterValues("hobbies")[0]%>
      

      使用EL:

      ${paramValues.hobbies[0]}
      
  • 有属性有关的内置对象
    • pageScope:页面范围,即pageContext范围
    • requestScope:请求范围
    • sessionScope:会话范围
    • applicationScope:上下文范围
  • 与请求头有关的内置对象
    • header:输出某一个请求头的值。

      输出请求头accept的值

      $(header.accept}
      
    • headerValues:如果某个请求头的值有多个,则使用headerValues返回一个数组。如下代码所示:

      ${headerValues.cookie[0]}
      

    上述代码将返回请求头cookie中的第一个值,例如:
    JSESSIONID=A6A22CA4AEE8F9E1111422C889740B24

  • 其他两个内置对象:cookie和initParam
    • cookie:用来获取cookie的值
    ${cookie.JSESSIONID.value}
    

    上述代码将输出名字为JSESSIONID的cookie的值。

    • initParam:用来输出上下文参数的值。

      在web.xml中配置上下文参数:

      <context-param>
      	<param-name>path</param-name>
      	<param-value>/WEB-INF/props</param-value>
      </context-param>
      

      在JSP中使用EL输出path的值:

      ${initParam.path}
      
  • 最特殊的内置对象:PageContext

    EL中的pageContext对象可以调用PageContext类中所有符合规范的getXxx方法,如PageContext类中有如下方法:

    public abstract ServletRequest getRequest()可以通过如下EL调用该方法:

    ${pageContext.request}
    

    该方法将输出请求对象,如下所示:

    org.apache.catalina.gore.ApplicationHttpRequest@1b98cbb
    既然该EL返回的是真正的请求对象,那么就可以继续调用HttpServletRequest中的其他getXxx方法,如:

    ${pageContext.request.remoteAddr}
    

    上述表达式将调用请求中的getRemoteAddr方法,输出其返回值,例如:127.0.0.1

四、运算符

  • 算术运算符

    EL中支持五种算术运算符,有 +实现加法运算;- 实现减法运算;* 实现乘法运算;/ 或div实现除法运算;% 或mod实现求模运算。

    如下代码所示:

    $19+2}<br>
    ${19-2]<br>
    ${19*2]<br>
    ${19/2}<br>
    ${19%2]<br>
    
  • 比较运算符

    EL中有6种比较运算符,可以对值进行比较,返回值为true或fasle。

    运算符含义
    ==、eq等于
    <、lt小于
    > 、gt大于
    <=、le小于等于
    >=、ge大于等于
  • 其他运算符
    • EL中除了有上面学习的算术、比较、逻辑运算符外,还有三种其他运算符。

    • empty运算符:判断值是否为null,如果是null,返回true,否则返回false。

      以下几种情况为空:

      1. 值为null值的时候,为空
      2. 值为空串的时候,为空
      3. 值是Object类型数组,长度为零的时候
      4. list集合,元素个数为零
      5. map集合,元素个数为零
    • 三目运算符:${A?B:C }如果A为true,则执行B,如果A为false,则执行C。

    • ( )运算符:通过()可改变优先级。

      EL中虽然提供了运算符,但是目前看没有太大意义,不可能直接输出一些运算结果,而往往运算结果将作为流程控制使用。

五、总结

  • 可见使用EL能大大简化JSP中表达式
  • 然而,EL不能实现流程控制,所以目前看并不能实现复杂的逻辑,必须结合标签一起使用,才能发挥更大作用。
  • .JSP的标准标签库JSTL,结合EL一起使用,将能够大大简化JSP。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值