任务四:EL表达式

java小课堂

分享人:慕孟洋

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

JSP2.0最重要的特性之一就是表达式语言EL(Expression Language),由于受到ECMAScript和Xpath表达式语言的启发, EL也被设计成可以轻松地编写免脚本的JSP页面。使用EL表达式,JSP页面可以不再使用任何的JSP声明、脚本和表达式,就可以 轻松的访问应用程序的数据,这使得JSP页面写起来更加简单。

2.知识剖析

EL表达式的主要作用:

获取数据

执行运算

获取Web开发常用对

基本语法:

EL表达式以${开头,并以}结束。EL表达式的结构:${expression}

[]和.运算符:

EL表达式可以返回任意类型的值。如果EL表达式的结果是一个带有属性的对象,则可以利用[]或则.运算符来访问其属性。

访问对象的属性,可以使用任意一种形式:${object["propertyName"]}或者${object.propertyName}

注意:如果propertyName不是有效的Java变量名,就只能使用[]运算符。

如果对象的属性返回的也是一个对象,并且也带有属性,此时既可以使用[],也可以使用.运算符来访问第二个对象的属性。

取值规则:

EL表达式的取值是从左到右进行的。对于expr-a[expr-b]形式的表达式,其EL表达式的取值方法如下:

1)先计算expr-a得到value-a

2)如果value-a为null,则直接返回null

3)然后计算expr-b得到value-b

4)如果value-b为null,则返回null

5)如果value-a为Java.util.List,则要进行以下处理:

a.强制value-b为int,如果不是,则抛出异常

b.如果value-a.get(value-b)抛出IndexOutBoundsException,则返回null

c.返回value-a.get(value-b)的值

6)如果value-a为java.util.Map,则会查看value-b是否为Map中的一个key。如果是,则返回value-a.get(value-b) ,如果不是,则返回null

7)如果value-a不是一个集合,那么,value-a必须是一个JavaBean。在这种情况下,必须强制value-b为String类型。如果 value-b为String类型。如果value-b是value-a的一个可读属性,则会调用该属性的getter方法返回值。如果getter方法抛出 异常,则该表达式就是无效的。

EL表达式的运算符

empty运算符:${empty username}

EL表达式的隐式对象:

pageContext     param     paramValues

header    headerValues    cookie

initParam    pageScope    requestScope

sessionScope    applicationScope

3.常见问题

隐式对象的作用?

4.解决方案

pageContext:JSP页面的上下文对象

param:一个包含所有请求参数,并用参数名作为key的Map

paramValues:一个包含所有请求参数,并用参数名作为key的Map

header:包含请求标题,并用标题名作为key的Map

headerValues:包含请求标题,并用标题名作为key的Map

cookie:包含了当前请求对象中所有Cookie对象的Map。

initParam:包含所有环境初始化参数

pageScope:这是一个Map,其中包含了页面域内的所有属性

requestScope:这是一个Map,其中包含了请求域内的所有属性

sessionScope:这是一个Map,其中包含了会话域内的所有属性

applicationScope:这是一个Map,其中包含了应用程序上下文域内的所有属性

5.编码实战

6.扩展思考

pageContex可以获得request对象,那么为什么会提供param、paramValues等隐式对象来获取请求参数呢?

7.参考文献

Spring+MyBatis企业应用实战

8.更多讨论

......

鸣谢

感谢大家观看

BY : 慕孟洋