EL表达式

一 概述

1.EL

Expression Language,表达式语言,一种不同于编程语言的语言,用于访问对象或者为对象赋值,取代JSP页面中嵌套的java代码,使页面风格统一。

2.语法格式

${expression}

expression既可以是属性,也可以是字面值,还可以是算术表达式、关系表达式、逻辑表达式、条件表达式等。

3.+

在EL表达式中,“+”只能用作算术运算,不能用来连接字符串。在进行算术运算时,EL尝试将两个数据转化为数字,转化不成功则抛出异常。

二 禁用EL

低版本的JSP页面可能不支持EL,需要在页面中禁用EL,根据作用范围,禁用有3种方式:

1.禁用单个EL表达式:

${expression};

2.禁用当前页面中的EL:

<%@ page isELIgnored="true"%>

3.禁用应用程序中全部页面或者指定页面中的EL:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>true</el-ignored>
    </jsp-property-group>
</jsp-config>

三 EL表达式作用

  • 可以将字面值输出到页面。
  • 访问对象,可以访问对象中的属性、成员方法与静态方法,不可访问成员变量与静态变量。属性不存在时,输出空字符串,而不是null。
  • 可以访问作用域范围内的属性,访问顺序:page、request、session、application,由小到大。
  • 可以访问环境变量:请求参数、初始化参数、消息报头、cookie。
  • ${empty expression}:判断对象是否为空,为空返回true。
  • ${not empty expression}:表达式非空值返回true。
  • ${list[0]}:访问数组或者List集合中的元素,索引越界不会抛出异常或返回null,而是返回空字符串。
  • ${map.key}:访问map集合。
  • 支持算术运算:a+b。
  • 支持关系运算:对比两个参数的大小关系。
  • 支持逻辑运算:&& ! ||,判断事件是否成立。
  • 支持条件运算:${条件表达式?表达式1:表达式2}:条件表达式为true,执行表达式1,否则执行表达式2。
  • EL表达式可以当做普通字符串插入JavaScript代码中。

四 内置对象

1.使用规则

EL表达式在底层创建了许多对象,这些对象可以在JSP页面中直接使用。

2.页面上下文对象pageContext

  • 通过pageContext可以获取其他内置对象,如request/session/out/exception/page/application,不可以获得config。
  • 获取到其他内置对象以后,可以获取其属性,如pageContext.request.contentLength。

3.作用域范围的隐含对象

  • 包括:pageScope/requestScope/sessionScope/applicationScope。
  • 可以访问作用域范围内保存的数据,不可以访问具有getter方法的属性。

4.环境信息的隐含对象

  • param:访问请求参数。
  • paramValues:当一个请求参数包含多个值时使用,以数组存储。
  • header:用于获取HTTP请求头的值。
  • headValues:当一个请求头包含多个值时使用,以数组存储。
  • initParam:获取初始化参数的值。
  • cookie:访问Cookie对象。

五 自定义EL函数

1.自定义函数的一般步骤

  1. 创建一个类,在类中创建一个有返回值的静态方法。
  2. 编写标签库描述文件.tld,将编写好的文件放在WEB-INF目录下。

2.标签库描述文件

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version
="2.0"> <description>JSTL 1.1 functions library</description> <display-name>JSTL functions</display-name> <tlib-version>1.1</tlib-version> <short-name>fn</short-name> <uri>http://java.sun.com/jsp/jstl/myFunctions</uri><!-- 声明时使用 --> <function> <description> Tests if an input string contains the specified substring. </description> <name>contains</name><!-- 调用时使用的名称 --> <function-class>org.apache.taglibs.standard.functions.Functions</function-class><!-- 自定义类的全限定性类名 --> <!-- 无论是返回值,还是形参,都必须使用全限定性类名 --> <function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature> </function> </taglib>

3.使用

首先在jsp页面中引入标签库:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/myFunctions"%>

使用语法同EL相同:

${fn:functionName(arg...)}

4.作用

取代JSP页面中的java代码,使页面风格统一,更加简洁。

原文地址:https://www.cnblogs.com/tonghun/p/EL.html