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

2022-09-19 09:16:15 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

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的语法

代码语言:javascript复制
${ 
   表达式}

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

代码语言:javascript复制
${ 
   "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对象中的属性对象中的属性:

代码语言:javascript复制
 ${ 
     productBean.category.name} ,

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

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

代码语言:javascript复制
${ 
     productBean["category"]["name"] }

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

代码语言:javascript复制
${ 
       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()

代码语言:javascript复制
//EL: 获取session域中存放的user的性别属性
${ 
     sessionScope.user.sex}

// jsp脚本 : 
<%
User user = (User)session.getAttribute("user");
String sex = user.getSex0;
out.print(sex);
%>
    
//由上述JSP脚本代码与EL的对比可以看出, EL自动完成了类型转换和数据输出功能,并且大大简化了代码量
代码语言:javascript复制
<%@ 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项目名称)
代码语言:javascript复制
<%@ 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)
代码语言:javascript复制
<%@ 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.cn/164762.html原文链接:https://javaforall.cn

0 人点赞