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>

Java精选笔记_EL表达式的更多相关文章

  1. Java精选笔记_自定义标签

    自定义标签 自定义标签入门 什么是自定义标签 自定义标签可以有效地将HTML代码与Java代码分离,从而使不懂Java编程的HTML设计人员也可以编写出功能强大的JSP页面 JSP规范中定义了多个用于 ...

  2. Java精选笔记_JSTL(JSP标准标签库)

    JSTL(JSP标准标签库) JSTL入门 JavaServer Pages Standard Tag Library:JSP标准标签库 在JSP中可以通过Java代码来获取信息,但是过多的Java代 ...

  3. Java精选笔记_XML基础

    XML基础 XML概述 W3C组织简介 W3C是World Wide Web Consortium(万维网联盟)的缩写,它是对网络标准定制的一个非赢利组织,如HTML.XHTML.CSS.XML的标准 ...

  4. Java精选笔记_JavaBean

    JavaBean组件 初始JavaBean JavaBean是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类. 一个标准的JavaBean组件需要遵循一定的编码规范,具体如下 ...

  5. Java精选笔记_JSP技术

    JSP技术 JSP概述 什么是JSP 在JSP全名是Java Server Page,它是建立在Servlet规范之上的动态网页开发技术. 在JSP文件中,HTML代码与Java代码共同存在,其中,H ...

  6. Java精选笔记_Java编程基础

    Java的基本语法 Java代码的基本格式 修饰符 class 类名 {   程序代码 } 一个Java源文件只定义一个类,不同的类使用不同的源文件定义:将每个源文件中单独定义的类都定义成public ...

  7. java学习笔记—EL表达式(38)

    EL表达式 EL即Expression Language,主要的任务是帮助开发者简化获取域属性. 但是一般情况下需要使用EL和JSTL结合使用. 语法: ${ // 隐含对象|直接写域中的属性 }  ...

  8. Java学习笔记-Lambda表达式

    Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数是接口)的实例 意义 自从Java 8开始,Java支持Lambda表达 ...

  9. Java精选笔记_国际化

    国际化 什么是国际化 指软件在开发时就应该具备支持多种语言和地区的功能,当应对不同国家和地区的用户访问,针对不同国家和地区的用户,提供相应的.符合来访者阅读习惯的页面和数据. 由于国际化interna ...

随机推荐

  1. [转帖]Android平台下OpenGL初步

    原文请看 Android平台下OpenGL初步 本文只关注于如何一步步实现在Android平台下运用OpenGl. 1.GLSurfaceView GLSurfaceView是Android应用程序中 ...

  2. 转载:Jmeter教程索引

    摘自: 阳光温暖了心情 的 http://www.cnblogs.com/yangxia-test/category/431240.html 1 JMeter学习(一)工具简单介绍 2 JMeter学 ...

  3. python URLObject url处理模块

    1.需求来源 给一个url串,例如https://github.com/zacharyvoase/urlobject?spam=eggs#foo,想要截取串中某个部分,比如传输协议(https).服务 ...

  4. js中将文件的base64转换成file并上传到服务器

    ** * @param base64Codes * 图片的base64编码 */ function sumitImageFile(base64Codes){ var form=document.for ...

  5. c++——派生类和基类转换(类型兼容性原则)

    基类也叫父类,派生类也叫子类. 类之间的继承关系继承关系是类之间的父子关系. 继承关系的特点如下:A. 子类拥有父类的所有属性和行为B. 子类也是一种特殊的父类C. 子类对象可以当父类对象使用D. 子 ...

  6. 【精】C# 中的委托和事件(转)

    C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 ...

  7. C++笔记 4

    1.类和对象   类就是对对象的描述,主要从属性和行为两个方面描述.   对于属性一般作成private , 行为作为public   函数 (1)构造函数,初始化所有的成员变量,系统自动调用,可以重 ...

  8. 7款基于jquery的动画搜索框

    无论是电商网站,还是媒体网,还是个人博客,每个网站都有属于自己个性化的搜索框.今天小编给大家带来7款基于jquery的动画搜索框.每个搜索框都采用了动画效果,一起看下效果图吧. 在线预览   源码下载 ...

  9. plsql 只能识别32位的oracle解决办法

    http://www.cnblogs.com/ymj126/p/3712727.html#undefined

  10. Qt 4.8.5 icpc: Command not found

    icpc: Command not found 交叉编译Qt4.8.5的时候出现