Javaweb-EL表达式

文章目录
一、初时JavaBean

1.什么是JavaBean
2.访问JavaBean的属性
3.BeanUtils工具

二、EL表达式

1.初识EL
2.EL中的标识符
3.EL中的保存字
4.EL中的变量
5.EL中的常量
	①布尔常量
	②整型变量
	③浮点数常量
	④字符串常量
	⑤Null常量
	
6.EL中的运算符

	①点运算符(.)
	②方括号运算符([])
	③算术运算符
	④比较运算符
	⑤逻辑运算符
	⑥empty运算符
	⑦条件运算符
	⑧“()”运算符

7.EL隐式对象

①pageContext对象
②Web域相关对象
③param和paramValues对象
④Cookie对象

1.什么是JavaBean

JavaBean在MVC设计模型中是model,又称模型层,在一般的程序中,我们称它为数据层,就是用来设置数据的属性和一些行为,然后我会提供获取属性和设置属性的get/set方法JavaBean是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean
通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java
类可以通过自身机制发现和操作这些JavaBean 属性。 
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
  JavaBean可分为两种:一种是有用户界面(UI,User
Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean

2.访问JavaBean的属性

1、JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。

2、属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,name属性的修改器名称为setName,password属性的修改器名称为setPassword。 

3、属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,例如,name属性的访问器名称为getName,password属性的访问器名称为getPassword。 

4、一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。

3.BeanUtils工具

主要提供了对于JavaBean进行各种操作,比如对象,属性复制等等。

BeanUtils设置属性值的时候,如果属性是基本数据类型,那么BeanUtils会自动帮我们进行数据类型的转换,并且BeanUtils设置属性的时候也是依赖于底层的getter和setter方法。如果设置的属性值是其他的引用数据类型,此时必须要注册一个类型转换器才能实现自动的转换(参考下面的ConvertUtils)

在这里插入图片描述

二、EL表达式

1.初识EL

在JSP开发中,为了获取servlet域对象中存储的数据,经常书写很多的java代码,这样的做法会使得JSP代码非常的混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式。EL是ExpressionLanguage的缩写,是一种简单的数据访问语言

2.EL中的标识符

不能以数字开头。
不能使EL中的保留字,如and,or,gt	
不能是EL隐式对象,如pageContext
不能包含单引号,双引号,减号,正斜杠等特殊字符

3.EL中的保存字

在这里插入图片描述

4.EL中的变量

${product}

5.EL中的常量

EL表达式中的常量又称字面量,它是不能改变的数据。在EL表达式中包含多种常量,接下来分别对这些常量进行介绍。

①布尔常量

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

②整型常量

整型常量与Java中的十进制的整型常量相同,它的取值范围是Java语言中定义的常量Long.MIN_VALUE到Long.MAX_VALUE之间,即(-2)63~263-1之间的整数。

③浮点数常量

浮点数常量用整数部分加小数部分表示,也可以用指数形式表示,例如,1.2E4和1.2都是合法的浮点数常量。它的取值范围是Java语言中定义的常量Double.MIN_VALUE到Double.MAX_VALUE之间,即4.9E-324~1.8E308之间的整数。

④字符串常量

字符串常量是用单引号或双引号引起来的一连串字符。由于字符串常量需要用单引号或双引号引起来,所以字符串本身包含的单引号或双引号需要用反斜杠(\)进行转义,即用“\”表示字面意义上的单引号,用“\”表示字面意义上的双引号。如果字符串本身包含反斜杠(\),也要讲行转义,即用“\\”表示字面意义上的反斜杠。

需要注意的是,只有字符串常量用单引号引起来时,字符串本身包含的单引号才需要进行转义,而双引号不必进行转义;只有字符串常量用引号引起来时,字符串包含的双引号才需要进行转义,而单引号不必转义,例如,"ab'4c\"d5\\e"表示的字符串是ab'4c"\e。

⑤ Null常量

Null常量用于表示变量引用的对象为空,它只有一个值,用null表示。

6.EL表达式支持简单的运算,例如,加(+)、减(一)、乘(*),陈(/)守。为此,在EL中越供了多种运算符,根据运算方式的不同,EL中原算符包括一下几种。

①点运算符(.)

	EL表达式中的点运算符,用于访问JSP页面中某些对象的属性,如JavaBean对象、List对象、Array对象等,其语法格式如下。

${customer.name}

在上述语法格式中,表达式${customer.name}中点运算符的作用就是访问customer对象中的name属性。

②方括号运算符([])

EL表达式中的方括号运算符与点运算符的功能相同,都用于访问JSP页面中某些对象的属性,当获取的属性名中包含一些特殊符号,如“一”或“?”等并非字母或数字的符号,就只能使用方括号运算符来访问该属性,其语法格式如下。

${user{"My-Name"}}

需要注意的是,在访问对象的属性时,通常情况都会使用点运算符作为简单的写法,但实际上,方括号运算符比点运算符应用更加广泛。接下来就对比一下这两种运算符在实际开发中的应用,具体如下。

(1)点运算符和方括号运算符在某种情况下可以互换,如${student.name}等价于${student["name"]}。

(2)方括号运算符和点运算符可以相互结合使用,例如,表达式${users[0].userName}可以访问集合或数组中的第一个元素的userName属性。

(3)方括号运算符还可以访问List集合或数组中指定索引的某个元素,如表达式${users[0]}用于访问集合或数组中第一个元素。在这种情况下,只能使用方括号运算符,而不能使用点运算符。

3.算术运算符

EL表达式中的算术运算符用于对整数和浮点数的值进行算术运算。使用这些算术运算符可以非常方便地在JSP页面进行算术运算,并且可以简化页面的代码量。接下来通过下表来列举EL表达式中所有的算术运算符。

算数运算符
算数运算符 说明 算数表达式 结果

  • 加 ${10+2} 12
  • 减 ${10-2} 8
  • 乘 ${10*2} 20
    /(或div) 除 10 / 4 或 {10/4}或 10/4{10div2} 2.5
    %(或mod) 取模(取余) KaTeX parse error: Expected '}', got 'EOF' at end of input: {10%4}或{10mod2} 2

上表中,列举了EL表达式中所有的算术运算符,这些运算符相对来说比较简单。在使用这些运算符时需要注意两个问题,“一”运算符既可以作为减号,也可以作为负号,“/”或“div”运算符在进行除法运算时,商为小数。

4.比较运算符

EL表达式中的比较运算符用于比较两个操作数的大小,操作数可以是各种常量、EL变量或EL表达式,所有的运算符执行的结果都是布尔类型。接下来通过表来列举EL表达式中所有的比较运算术符。

比较运算符
比较运算符 说明 算数表达式 结果
==(或eq) 等于 10 = = 2 或 {10==2}或 10==2{10 eq 2} false
!=(或ne) 不等于 10 ! = 2 或 {10!=2}或 10!=2{10 ne 2} true
<(或lt) 小于 10 < 2 或 {10<2}或 10<2{10 lt 2} false

(或gt) 大于 10 > 2 或 {10>2}或 10>2{10 gt 2} true
<=(或le) 小于等于 10 < = 2 或 {10<=2}或 10<=2{10 le 2} false
= (或ge) 大于等于 10 > = 2 或 {10 >=2}或 10>=2{10 ge 2} true
上表中,列举了EL表达式中所有的比较运算符,在使用这些运算符时需要注意两个问题,具体如下:

(1)比较运算符中的“==”是两个等号,千万不可只写一个等号。

(2)为了避免与JSP页面的标签产生冲突,对于后4种比较运算符,EL表达式中通常使用括号内的表示方式,例如,使用“1t”代替“≤”运算符,如果运算符后面是数字,在运算符和数字之间至少要有一个空格,例如${1lt 2},但后面如果有其他符号时则可以不加空格,例如${1lt(1+1)}。

5.逻辑运算符

EL表达式中的逻辑运算符用于对结果为布尔类型的表达式进行运算,运算的结果仍为布尔类型。接下来通过下表列举EL表达式中所有的逻辑运算符。

逻辑运算符
逻辑运算符 说明 算数表达式 结果

&&(and)	逻辑与	${true&&false}或者{ture and false}	false
||(or)	逻辑或	${fasle||true}或者{false or true}	true
!(not)	逻辑非	${!true}或${not ture}	false

上表中,列出了EL表达式中的3种逻辑运算符,需要注意的是,在使用&.&运算符时,如果有―个表达式结果为false,则结果必为false,在使用||运算符时,如果有一个表达式的结果为true,则结果必为true。

6.empty运算符

EL表达式中的emptv运算符用干判断某个对象是否为null或"",结果为布尔类型,其基本的语法格式如下所示。

${empty var}

需要注意的是,empty运算符可以判定变量(或表达式)是否为null或""。例如,下列情况empty运算符的返回值为true。

(1) var变量不存在,即没有定义,例如表达式${empty name},如果不存在name变量,就返回true。

(2) var变量的值为null,例如表达式${empty customer.name},如果customer.name的值为null,就返回true。

(3) var变量引用集合(Set、 Map和 List)类型对象,并且在集合对象中不包含任何元素。

7.条件运算符

EL表达式中条件运算符用于执行某种条件判断,它类似于Java语言中的if一else语句,其语法格式如下。

${A? B:C}

在上述语法格式中,表达式A的计算结果为布尔类型,如果表达式A的计算结果为true,就执行表达式B并返回B的值;如果表达式A的计算结果为false,就执行表达式C并返回C的值,例如表达式${(1==2)?3:4}的结果就为4。

8.“()”运算符

EL表达式中的圆括号用于改变其他运算符的优先级,例如表示${a*b+C},正常情况下会计算a*b的积,然后再将计算的结果与C相加,如果在这个表达式中加一个圆括号运算符,将表达式修改为${a*(b+c)},这样则先计算b与C的和,再将计算的记过与a相乘。

需要注意的是,EL表达式中的运算符都有不同的运算优先级,当EL表达式中包含多种运算符时,它们必须按照各自优先级的大小来进行运算。接下来,通过下面表格来描述这些运算的优先级。

运算符的优先级
优先级 运算符 优先级 运算符

1	[].	6	<> <= >= lt gt le ge
2	()	7	== != eq ne 
3	-(-) not ! empty	8	&& and
4	* / div % mod	9	|| or 
5	+(+)-(-)	10	?:

上面列表,列举了不同运算符各自的优先级大小。对于初学者来说,这些运算符的优先级不必刻意地去记忆。为了防止产生歧义,建议读者尽量使用“()”运算符来实现想要的运算顺序。注意:在应用EL表达式取值时,没有数组的下标越界,没有空指针异常,没有字符串的拼接。

7.EL隐式对象
在学习JSP技术时,提到过隐式 对象的应用。在EL技术中,同样 提供了隐式对象,EL中的隐式对象 共有 11个

pageContext可以获取 其它10个隐式对象,
pageScope、
requestScope
sessionScope
applicationScope适用于获取指定域的隐式对象
param和param Values是用于 获取 请求参数的隐式对象
header和headerValues是用于获取HTTP请求消息头的隐式对象
cookie是用于获取Cookie信息的隐式对象
initParam是用于获取 Web应用初始化信息的隐式对象
pageContext

为了获取JSP页面的隐式对象,可以使用EL表达式中的pageContext隐式对象,pageContext隐式对象的实例代码如下:

${pageContext.response.characterEncoding}

请求消息为:

${pageContext.request.requestURI}

服务器信息为:

${pageContext.servletContext.servletInfo}

使用EL表达式中的pageContext对象成功 地获取到了 request、response、servletContext和ServletConfig对象中的属性。需要注意的是,不要将EL表达式中的隐式对象与JSP中的隐式对象混淆,只有pageContext对象是它们所共有的,其它隐式对象则毫不相关。

Web域相关对象
在 Web 开发中,PageContext、HttpServletRequest、HttpSession和ServletContext这4个对象之所以可以存储数据,是因为它们内部都定义了一个Map集合,这些Map集合是有一定作用范围的。例如,HttpRequest对象存储的数据只在当前请求中可以获取带。习惯性地,我们把这些,Map集合称为域,这些Map集合所在的对象称为域对象。在EL表达式中,为了获取指定域中的数据,提供了 pageScope、requestScope、SessionScope和applicationScope4个隐式对象“
需要注意的是,EL表达式只能在这4个作用域中获取数据。”

param和paramValues对象
在JSP页面中,经常需要 获取客户端传递的请求参数,为此,EL表达式t## 提供了param和paramValues两个隐式对象,这两个隐式对象专门用于获取客户端访问JSP页面时传递的请求参数(类似于 httprequest中的 getparam对象)

1、param对象
param对象用于获取请求参数的 某个值,它是 Map类型,与 request.getParameter()方法相同,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是Null。param对象的语法格式比较简单,具体示例如下:

${param.num}

2、paramValues对象
如果一个请求参数有多个值,可以使用paramValues对象来获取请求参数的所有值,该对象 用于返回请求参数所有值 组成的数组,如果要 获取某个请求 参数的第一个值,可以使用 如下代码:

${paramValues.num[0]}

cookie对象
在JSP开发中,经常要获取 客户端的Cookie信息,为此,在EL表达式中,提供了Cookie隐式对象,该对象是一个代表所有 Cookie 信息的Map集合,Map集合中元素的键为各个Cookie对象的名称,值则为对应的Cookie对象。

在这里插入图片描述

在这里插入图片描述

initParam对象
在开发一个Web应用程序时,通常会在 **web.xml 文件中配置 一些初始化参数,**为了方便 获取这些参数,EL表达式提供了 一个 initParam隐式对象,该对象 可以获取 Web应用 程序中 全局初始化 参数(注意与 param参数的区别)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值