EL表达式

一、EL表达式

  • 命令格式:${作用域对象别名.共享数据}
  • 命令作用:
    • EL表达式是EL工具包提供的一种特殊的命令格式【表达式命令格式】
    • EL表达式在JSP文件上使用
    • 负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体

二、EL表达式 — 作用域对象别名

  • JSP文件可以使用的作用域对象

    • ServletContextapplication:全局作用域对象
    • HttpSessionsession:会话作用域对象
    • HttpServletRequestrequest:请求作用域对象
    • PageContextpageContext:当前页作用域对象。这是JSP文件独有的作用域对象,Servlet中不存在。在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用,不能共享给其他Servlet或者其他JSP文件。真实开发过程中,主要用于JSTL标签与JSP文件之间数据共享(JSTL --> pageContext --> JSP
  • EL表达式提供作用域对象别名

    | JSP | EL表达式 |
    | :————-: | :——————————————: |
    | application | ${applicationScope.共享数据名} |
    | session | ${sessionScope.共享数据名} |
    | request | ${requestScope.共享数据名} |
    | pageContext | ${pageScope.共享数据名} |

三、EL表达式将引用对象属性写入到响应体

  • 命令格式:${作用域对象别名.共享数据名.属性名}
  • 命令作用:从作用域对象读取指定共享数据关联的引用对象的属性值,并自动将属性的结果写入到响应体
  • 属性名:一定要与引用类型属性名完全一致(大小写)
  • EL表达式没有提供遍历集合的方法,因此无法从作用域对象中读取集合内容输出

四、EL表达式简化版

  • 命令格式:${共享数据名}
  • 命令作用:EL表达式允许开发人员开发时省略作用域对象别名
  • 工作原理:EL表达式简化版由于没有指定作用域对象,所以在执行时采用【猜】算法。按照pageContext ---> request ---> session ---> application的顺序依次查找,若没找到,返回null

  • 存在隐患:容易降低程序执行速度;容易导致数据定位错误

  • 应用场景:设计目的,就是简化从pageContext读取共享数据并输出难度
  • EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都使用简化版,拒接使用标准版

五、EL表达式 — 支持运算表达式

  • 前提:在JSP文件中,有时需要将读取的共享数据进行一番运算之后,将运算结果写入到响应体

  • 运算表达式:

    • 数学运算
    • 关系运算:>(gt)>=(ge)==(eq)<(lt)<=(le)!=(!=)

    • 逻辑运算:&&||!

六、EL表达式提供内置对象

  1. 命令格式:${param.请求参数名}

    命令作用:通过请求对象读取当前请求包中的请求参数内容,并将请求参数内容写入到响应体

    代替命令:request.getParameter(请求参数名);

  2. 命令格式:${paramValues.请求参数名[下标]}

    命令作用:如果浏览器发送的请求参数是[一个请求参数关联多个值],此时可以通过paraValues读取请求参数下指定位置的值,并写入到响应体

    代替命令:request.getParameterValues(请求参数名);

七、EL表达式常见异常

  • javax.el.PropertyNotFoundException:在对象中没有找到指定属性

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!