• 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代码,使页面风格统一,更加简洁。

  • 相关阅读:
    mysql5.5的安装与配置(亲测版)
    CentOS 6.5升级Python和安装IPython(亲测可用)
    运维mysql基础
    linux命令巧用,随手记
    《大话设计模式》——建造者模式
    《大话设计模式》——外观模式
    《大话设计模式》——模版方法模式
    抽象类和接口的区别
    《大话设计模式》——原型模式
    《大话设计模式》——工厂方法模式
  • 原文地址:https://www.cnblogs.com/tonghun/p/EL.html
Copyright © 2020-2023  润新知