• Java精选笔记_EL表达式


    EL表达式

    初始EL


    EL是一种可以简化JSP页面的表达式,EL表达式的语法非常简单都是以“${”符号开始,以“}”符号结束的
    EL表达式是一种简单的数据“访问”语言,只能读,不能写。需要写在JSP页面上


    EL能实现对pageContext对象、session对象、request对象等存储对象的简化访问,能够简洁地访问请求参数、Cookie和其他请求数据,即EL可以很方便地访问大多数JSP内置的隐含对象,从而简化编程。
    EL还可以简化对JavaBean属性和集合元素的访问。
    需要注意的是,“${表达式}”中的表达式必须符合EL语法要求。最终会被翻译成一段JAVA代码
    大多数Java Web服务器都是默认支持EL的。对于单个JSP页面,可以使用page指令来设置JSP页面是否支持EL。


    JSP页面默认支持EL,如果不支持的话,我们可以通过设置page指令的isELIgnored属性为false,来实现对EL的支持。如:<%@ page isELIgnored="true|false" %>


    而对于整个JSP应用,要修改Web应用的web.xml配置文件来设置是否支持EL。如果要使整个JSP应用都支持EL,则设置<jsp-property-group>元素的子元素<el-ignored>的值为false。


    EL语法


    语法
    ${beanName.propertyName}
    ${beanName["propertyName"]}


    EL中的标识符
    不能以数字开头
    不能是EL中的保留字,如and、or、gt
    不能是EL隐式对象,如pageContext
    不能包含单引号(')、双引号(")、减号(-)和正斜线等特殊字符。


    EL中的保留字
    and、eq、gt、true、instanceof、or、ne、ne、le、false、empty、not、it、ge、null、div、mod
    保留字是编程语言里事先定义好并赋予了特殊含义的单词,和其它语言一样,EL表达式中也定义了许多保留字


    EL中的变量
    EL表达式中的变量就是一个基本的存储单元,EL表达式可以将变量映射到一个对象上
    ${product} product就是一个变量,不用事先定义就可以直接使用。例如表达式${product}就可以访问变量product的值


    EL中的常量
    EL表达式中的常量又称字面量,它是不能改变的数据。在EL表达式中包含多种常量。


    布尔常量
    用于区分一个事物的正反两面,它的值只有两个,分别是true和false。


    整型常量
    取值范围是Java语言中定义的常量Long.MIN_VALUE和Long.MAX_VALUE之间,即(-2)63~263-1之间的整数。
    浮点数常量
    取值范围是Java语言中定义的常Double.MIN_VALUE到Double.MAX_VALUE之间,即4.9E-324~1.8E308之间的整数。
    字符串常量
    是用单引号或双引号引起来的一连串字符
    Null常量
    Null常量用于表示变量引用的对象为空,它只有一个值,用null表示。


    EL中的运行符
    算术运算符
    + - * /或div %或mod
    关系(比较)运算符
    用于比较两个操作数的大小,操作数可以是各种常量、EL变量或EL表达式
    ==或eq、!=或ne、>或gt、<或lt、>=或ge、<=或le
    逻辑运算符
    用于对结果为布尔类型的表达式进行运算
    and 或 &&
    or 或 ||
    not 或 !
    点运算符.
    用于访问JSP页面中某些对象的属性,如JavaBean对象、List对象、Array对象等。如:${customer.name}
    方括号运算符[]


    用于访问JSP页面中某些对象的属性,当获取的属性名中包含一些特殊符号,如“-”或“?”等并非字母或数字的符号,就只能使用方括号运算符来访问该属性
    ${user["My-Name"]}
    .与[]互换 如:${student.name}等价于${student["name"]}
    .与[]结合使用 表达式${users[0].userName}可以访问集合或数组中的第一个元素的userName属性。
    方括号运算符还可以访问List集合或数组中指定索引的某个元素,如表达式${users[0]}用于访问集合或数组中第一个元素。在这种情况下,只能使用方括号运算符,而不能使用点运算符。


    条件运算符
    用于执行某种条件判断,它类似于Java语言中的if-else语句
    ${A?B:C}


    empty运算符
    用于判断某个对象是否为null或””
    ${empty var}
    如果对象为空,返回true,如果不为空,返回false
    下列情况返回true
    var变量不存在,即没有定义,例如表达式${empty name},如果不存在name变量,就返回true。
    var变量的值为null,例如表达式${empty customer.name},如果customer.name的值为null,就返回true。
    var变量引用集合(Set、Map和List)类型对象,并且在集合对象中不包含任何元素。


    如果对象为null或者对象时长度为0的字符串或者对象是一个空容器/空数组都返回true


    取出作用域里的数据
    字符串直接用
    数组需要加  下标    ${user[0]}
    map    需要使用key   
    写法一:${user.key1}  简易方式,key决不能有特殊字符,否则取不出来
    写法二:${msg["key1"]}    建议使用这种方式,因为即使key有特殊字符,也可以正常用
    map在JavaWeb中可以理解为一个特殊的JavaBean。key=javaBean属性,value=javaBean属性值
    JavaBean取值
    写法一:${user.name}  简易方式,属性名决不能有特殊字符,否则取不出来
    写法二:${user["name"]}    建议使用这种方式,因为即使属性名有特殊字符,也可以正常用
    ${user.name} :调用  user对象的 getName方法
    在EL表达式中获取自定义属性,必须在JavaBean中自定义getXxx方法
    例如:${user.username}   在msg5中设置getUsername方法。
    注意:1、方法要有返回值才能打印;
    2、方法修饰符建议一定是public
    3、方法不能有参数



    EL隐式对象


    pageContext对象
    对应于JSP页面中的pageContext对象
    ${pageContext.response.characterEncoding}
    可以用来访问JSP其他10个内置对象
    请求参数
    param
    获取请求参数的某个值,它是Map类型,与request.getParameter()方法相同
    表示一个保存了所有请求参数的Map对象
    在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null
    ${param.num}
    paramValues
    获取请求参数的所有值
    表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string类型数组
    获取某个请求参数的第一个值: ${paramValues.nums[0]} 


    请求头
    header
    获取请求头字段的某个值。如: ${header["user-agent"]}
    表示一个保存了所有http请求头字段的Map对象
    headerValues
    获取请求头字段的多个值
    表示一个保存了所有http请求头字段的Map对象,返回string类型数组
    获取某个请求头字段的第一个值:${headerValues["Accept-Language"][0]}


    Cookie对象
    获取当前请求所有Cookie,该对象是一个代表所有Cookie信息的Map集合
    Map集合中元素的关键字为各个Cookie的名称,值则为对应的Cookie对象
    获取cookie对象的信息:${cookie.userName}
    获取cookie对象的名称:${cookie.userName.name}
    获取cookie对象的值:${cookie.userName.value}


    初始化参数
    initParam
    获取上下文参数
    表示一个保存了所有web应用初始化参数的map对象
    获取Web应用程序中全局初始化参数:${initParam.count} 


    作用域
    HttpRequest对象存储的数据只在当前请求中可以获取到。习惯性的,我们把这些Map集合称为域,这些Map集合所在的对象称为域对象。


    pageScope
    代表page域中用于保存属性的Map对象
    ${pageScope.userName} 


    requestScope
    映射请求范围的变量名到其值


    sessionScope
    applicationScope


    自定义EL函数


    HTML注入
    在JSP开发中,经常会提交一些包含“<”、“>”等特殊HTML字符的数据,如果程序不对这些特殊字符进行转换,浏览器将把这些特殊字符当做HTML标签进行解释执行,这就是所谓的“HTML注入”。


    函数必须采用public类中的public static方法编写并要映射到TLD标签库文件中
    语法:ns:func(a1,a2,....)


    配置


    实现无脚本的JSP页面
    <jsp-config>-<jsp-property-group>-<url-pattern>/<scripting-invalid>
    关闭EL
    <%@ page isELIgnored="true" %>
    <jsp-config>-<jsp-property-group>-<url-pattern>/<el-ignored>

  • 相关阅读:
    CCF CSP 201609-2 火车购票
    CCF CSP 201409-2 画图
    CCF CSP 201409-2 画图
    CCF CSP 201409-4 最优配餐
    CCF CSP 201409-4 最优配餐
    CCF CSP 201503-1 图像旋转
    CCF CSP 201503-1 图像旋转
    Ethical Hacking
    Ethical Hacking
    Ethical Hacking
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7582122.html
Copyright © 2020-2023  润新知