java el表达式 空_JavaWeb 之 EL表达式

一、简介

1、概念

EL 表达式的全称:Expression Language 表达式语言。

EL 是 JSP 内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象,取得对象属性的值,或执行简单的运算或判断操作。

2、作用

EL表达式主要是替换和简化 jsp 页面中表达式脚本在jsp页面中进行数据的输出。

EL 表达式仅仅用来读取数据,而不能第数据进行修改。

3、特点

EL 在得到某个数据时,会自动进行数据类型的转换

EL 表达式输出数据时,如果有则输出数据,如果为 null 则什么也不输出。

4、EL 表达式与 JSP 表达式的区别

① 如果数据为  null,jsp 显示 null,EL 则什么也不显示;

② EL 显示的数据,必须存放在域对象或上下文对象中;

③ EL 可以自带数据类型转换的功能;

5、语法格式

${表达式}

6、注意事项

jsp 默认是支持 el 表达式的。

如果要忽略 el 表达式,有两种方式

(1)设置 jsp 中 page 指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式

(2)\${表达式}:这种方式忽略当前这个 el 表达式,会在当前页面呈现原有格式。

7、案例

1

2

3 request.setAttribute("key","值");4 %>

5 表达式脚本输出 key 的值是:6   

7 EL 表达式输出 key 的值是: ${key1}8

注意:

EL 在表达式在输出 null 值的时候,输出的空串。

而 jsp 表达式脚本在输出 null 值的时候,输出的是 null  字符串。

二、EL 表达式搜索域数据的顺序

EL 表达式主要是在 jsp 页面中输出数据。主要是输出 域对象 中的数据。

当四个域中都有相同的 key 的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。

Demo:

1

2 //往四个域中都保存了相同的 key 的数据。

3 request.setAttribute("key", "request");4 session.setAttribute("key", "session");5 application.setAttribute("key", "application");6 pageContext.setAttribute("key", "pageContext");7 %>

8 ${ key }

三、EL 表达式输出信息

创建一个 JavaBean,然后输出 JavaBean 类中的普通属性,数组属性,list集合和 map 集合属性。

JavaBean:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public classPerson {2 privateString name;3 privateString[] phones;4 private Listcities;5 private Mapmap;6

7 publicPerson() {8 }9

10 public Person(String name, String[] phones, List cities, Mapmap) {11 this.name =name;12 this.phones =phones;13 this.cities =cities;14 this.map =map;15 }16

17 publicString getName() {18 returnname;19 }20

21 public voidsetName(String name) {22 this.name =name;23 }24

25 publicString[] getPhones() {26 returnphones;27 }28

29 public voidsetPhones(String[] phones) {30 this.phones =phones;31 }32

33 public ListgetCities() {34 returncities;35 }36

37 public void setCities(Listcities) {38 this.cities =cities;39 }40

41 public MapgetMap() {42 returnmap;43 }44

45 public void setMap(Mapmap) {46 this.map =map;47 }48

49 @Override50 publicString toString() {51 return "Person{" +

52 "name='" + name + '\'' +

53 ", phones=" + Arrays.toString(phones) +

54 ", cities=" + cities +

55 ", map=" + map +

56 '}';57 }58 }

View Code

1、输出 JavaBean 的普通属性

2、输出数组信息

3、输出 List 集合

4、输出 Map 集合

Demo:

1

2 Person person = newPerson();3

4 person.setName("Hello EL");5 person.setPhones(new String[]{"123","456","789"});6

7 List cities = new ArrayList();8 cities.add("北京");9 cities.add("上海");10 cities.add("深圳");11 person.setCities(cities);12

13 Map map = new HashMap<>();14 map.put("key1","value1");15 map.put("key2","value2");16 map.put("key3","value3");17

18 person.setMap(map);pageContext.setAttribute("p", person);19 %>

20

21 输出 Person: ${ p }

22 输出 Person 的 name 属性: ${p.name}

23 输出 Person 的 phones 数组属性值: ${p.phones[2]}

24 输出 Person 的 cities 集合中的元素值: ${p.cities}

25 输出 Person 的 List 集合中个别元素值: ${p.cities[2]}

26 输出 Person 的 Map 集合: ${p.map}

27 输出 Person 的 Map 集合中某个 key 的值: ${p.map.key3}

28 --%>

29 %>

注意:

① 如果在 JavaBean 中只声明一个 age 变量,如果没有写 getAge() 方法,那么是无法通过 EL 表达式来读取该属性的;

② 如果在 JavaBean 中只是声明了一个 getAge() 方法,没有声明 age 这个变量,那么 EL 表达式也是可以读取;

③ EL 是通过JavaBean 对应的 getter() 方法来读取属性的,而不是直接通过属性的名字来读取(切记)

④这里的属性名是指 JavaBean 里面的 setter 和 getter 方法去掉 set或get,然后首字母变小写就是属性了。

⑤ 如果发生了下标越界,并不会报错,而是显示为空字符串。

四、EL表达式——运算

1、算数运算符

+、-、*、/(div)、%(mod)

注意:其中的除号可以用 div 来代替,取余可以用 mod 来代替。

算数运算符

说明

范例

结果

+

加法

${ 12 + 18 }

30

-

减法

${ 15 - 5 }

10

*

乘法

${ 2 * 10 }

20

/ 或 div

除法

$( 24 / 2 ) 或 ${ 24 div 2 }

12

% 或 mod

取模

${ 14 % 4 } 或 ${ 14 mod 10}

4

2、关系运算符

> < >= <= == !=

关系运算符:

关系运算符

说 明

范 例

结果

== 或 eq

等于

${ 5 == 5 } 或 ${ 5 eq 5 }

true

!= 或 ne

不等于

${ 5 !=5 } 或 ${ 5 ne 5 }

false

< 或 lt

小于

${ 3 < 5 } 或 ${ 3 lt 5 }

true

> 或 gt

大于

${ 2 > 10 } 或 ${ 2 gt 10 }

false

<= 或 le

小于等于

${ 5 <= 12 } 或 ${ 5 le 12 }

true

>= 或 ge

大于等于

${ 3 >= 5 } 或 ${ 3 ge 5 }

false

3、逻辑运算符

&&(and) ||(or) !(not)

逻辑运算符:

逻辑运算符

说 明

范 例

结果

&& 或 and

与运算

${ 12 == 12 && 12 < 11 } 或 ${ 12 == 12 and 12 < 11 }

false

|| 或 or

或运算

${ 12 == 12 || 12 < 11 } 或 ${ 12 == 12 or 12 < 11 }

true

! 或 not

取反运算

${ !true } 或 ${not true }

false

4、empty 空运算符

空运算符:empty

功能:用于判断一个数据是否为空,如果为空,则输出 true;不为空输出 false。

一下几种情况为空:

① 值为 null 值的时候,为空;

② 值为 空串 的时候,为空;

③ 值是 Object 类型的数据,长度为零的时候;

④ list 集合,元素个数为 零;

⑤ map 集合,元素个数为 零;

Demo:

1 ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0,为空或为0返回 true,不然返回 false

2 ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0;不为空或长度不为0返回 true,不然返回 false

3

4

5

6 //1、 值为 null 值的时候, 为空

7 request.setAttribute("emptyNull", null);8

9 //2、 值为空串的时候, 为空

10 request.setAttribute("emptyStr", "");11

12 //3、 值是 Object 类型数组, 长度为零的时候

13 request.setAttribute("emptyArr", newObject[]{});14

15 //4、 list 集合, 元素个数为零

16 List list = new ArrayList<>();17 //list.add("abc");

18 request.setAttribute("emptyList", list);19

20 //5、 map 集合, 元素个数为零

21 Map map = new HashMap();22 //map.put("key1", "value1");

23 request.setAttribute("emptyMap", map);24 %>

25 ${ empty emptyNull }

26 ${ empty emptyStr }

27 ${ empty emptyArr }

28 ${ empty emptyList }

29 ${ empty emptyMap }

30

5、三元运算符

格式:

表达式 1? 表达式 2: 表达式 3

说明:如果表达式 1 的值为真, 返回表达式 2 的值, 如果表达式 1 的值为假, 返回表达式 3 的值

Demo:

${ 12 != 12 ? "正确":"错误" }

6、"." 点运算 和 [] 中括号运算符

说明:

. 点运算,可以输出 JavaBean 对象中某个属性的值(其实是调用的 getter() 方法)

[ ] 中括号运算,可以输出有序集合中某个元素的值,并且中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值,key需要用引号(单引号或双引号)引起来

Demo:

1

2

3 Map map = new HashMap();4 map.put("a.a.a", "aaaValue");5 map.put("b+b+b", "bbbValue");6 map.put("c-c-c", "cccValue");7 request.setAttribute("map", map);8 %>

9 ${ map['a.a.a'] }

10 ${ map["b+b+b"] }

11 ${ map['c-c-c'] }

12

五、EL 表达式的 11 个隐含对象

EL 表达式中有 11 个隐含对象,是 EL 表达式自已定义的,可以直接拿来使用。

变量

类型

作用

pageContext

PageContextImpl

它可以获取 jsp 中的九大内置对象

pageScope

Map

它可以获取 pageContext 域中的数据

requestScope

Map

它可以获取 Request 域中的数据

sessionScope

Map

它可以获取 Session 域中的数据

applicationScope

Map

它可以获取 ServletContext 域中的数据

param

Map

它可以获取请求参数的值

paramValues

Map

它也可以获取请求参数的值, 获取多个值的时候使用。

header

Map

它可以获取请求头的信息

headerValues

Map

它可以获取请求头的信息, 它可以获取多个值的情况

cookie

Map

它可以获取当前请求的 Cookie 信息

initParam

Map

它可以获取在 web.xml 中配置的上下文参数

六、使用隐含对象

1、pageContext 对象的使用

使用 pageContext 对象可以获取:

1. 协议:

2. 服务器 ip:

3. 服务器端口:

4. 获取工程路径:

5. 获取请求方法:

6. 获取客户端 ip 地址:

7. 获取会话的 id 编号:8. 获取 jsp 其他的八个内置对象

Demo:

1

2

3 request.getScheme() 它可以获取请求的协议4 request.getServerName() 获取请求的服务器 ip 或域名5 request.getServerPort() 获取请求的服务器端口号6 getContextPath() 获取当前工程路径7 request.getMethod() 获取请求的方式(GET 或 POST)8 request.getRemoteHost() 获取客户端的 ip 地址9 session.getId() 获取会话的唯一标识10 --%>

11

12 pageContext.setAttribute("req", request);13 %>

14

15 1.协议: ${ req.scheme }

16 2.服务器 ip: ${ pageContext.request.serverName }

17 3.服务器端口: ${ pageContext.request.serverPort }

18 4.获取工程路径: ${ pageContext.request.contextPath }

19 5.获取请求方法: ${ pageContext.request.method }

20 6.获取客户端 ip 地址: ${ pageContext.request.remoteHost }

21 7.获取会话的 id 编号: ${ pageContext.session.id }

22

2、EL 获取四个特定域中的属性

EL 表达式只能从域对象中获取值,依次从最小的域中查找是否有该键对应的值,直到找到为止

使用 域名称可以选择性地获取域对象中的数据

注意:如果在域中没有对应的键值对,会返回空字符串""

域名称

作用域

pageScope

pageContext域

requestScope

request域

sessionScope

session域

applicationScope

application(ServletContext)域

Demo:

1

2

3 pageContext.setAttribute("key1", "pageContext1");4 pageContext.setAttribute("key2", "pageContext2");5 request.setAttribute("key2", "request");6 session.setAttribute("key2", "session");7 application.setAttribute("key2", "application");8 %>

9 ${ applicationScope.key2 }10

3、获取参数的信息

说明:

param                             Map                           它可以获取请求参数的值

paramValues                  Map                         它也可以获取请求参数的值, 获取多个值的时候使用。

Demo:

1 请求地址:2 http://localhost:8080/09_EL_JSTL/other_el.jsp?username=zs&password=666&hobby=java&hobby=cpp

3

4 输出请求参数 username 的值: ${ param.username }

5 输出请求参数 password 的值: ${ param.password }

6 输出请求参数 username 的值: ${ paramValues.username[0] }

7 输出请求参数 hobby 的值: ${ paramValues.hobby[0] }

8 输出请求参数 hobby 的值: ${ paramValues.hobby[1] }

4、获取请求头的信息

说明:

header                                          Map                                   它可以获取请求头的信息

headerValues                               Map                                 它可以获取请求头的信息, 它可以获取多个值的情况

Demo:

1 输出请求头【User-Agent】 的值: ${ header['User-Agent'] }

2 输出请求头【Connection】 的值: ${ header.Connection }

3 输出请求头【User-Agent】 的值: ${ headerValues['User-Agent'][0] }

5、获取 cookie 信息

说明:

cookie                                            Map                                它可以获取当前请求的 Cookie 信息

Demo:

1 获取 Cookie 的名称: ${ cookie.JSESSIONID.name }

2 获取 Cookie 的值: ${ cookie.JSESSIONID.value }

6、获取配置参数信息

说明:

initParam Map 它可以获取在 web.xml 中配置的上下文参数

Demo:

1 web.xml 中的配置2

3   username

4   root

5

6

7   url

8   jdbc:mysql:///test

9

10

11 示例代码:12 输出<Context-param>username 的值: ${ initParam.username }

13 输出<Context-param>url 的值: ${ initParam.url }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值