el表达式和jstl标签库

el表达式,只用于jsp页面中。

el表达式的最初提出来的时候的作用:

1. 可以从域对象中获取数据。比较简单。

${获取域对象内容的表达式}
pageContext
request
session
application

2.第二种用法,在el表达式中写各种运算。

算数运算
比较运算
逻辑运算
三元运算

1、使用el表达式获取域对象里面的值

application
session
request
pageContext page

(1)el表达式使用在jsp页面中,不能在html中使用,servlet中。
(2)写法: ${域对象名称}
(3)使用el表达式获取四个域对象里面的值
(4)el表达式

= 代码

<%
//我们可以通过域对象设置值。
request.setAttribute(“aaa”, “AAA”);
session.setAttribute(“bbb”, “BBB”);
pageContext.setAttribute(“ccc”, “CCC”);
application.setAttribute(“ddd”, “DDD”);

//之前取值的方式。
String value = (String) request.getAttribute(“aaa”);
%>

<-- 通过el表达式来获取 域对象设置的参数值。如何获取。 -->
<-- el表达式通过域对象的名字,直接就能获取到值,而且不涉及 强制类型转换的问题。 -->
${aaa}

${bbb}

${ccc}

${ddd}

(4)如果使用el表达式获取的名称不存在,返回空字符串 “”,不会出现空指针异常
el在表达式在底层已经为我们做了强制转换了,不需要我们手动做。
他能够提高代码的安全性,显示效果能够友好展示。

 如果使用传统方式getAttribute获取名称不存在,返回null,容易出现空指针异常

(5)使用el表达式获取域对象名称相同的,获取的是域范围最小的里面的值

<%
//我们可以通过域对象设置值。
request.setAttribute(“andy”, “AAA”);
session.setAttribute(“andy”, “BBB”);
pageContext.setAttribute(“andy”, “CCC”);
application.setAttribute(“andy”, “DDD”);

//之前取值的方式。
String value = (String) request.getAttribute(“andy”);
out.println(value);
%>


<-- 通过el表达式来获取 域对象设置的参数值。如何获取。 -->
<-- el表达式通过域对象的名字,直接就能获取到值,而且不涉及 强制类型转换的问题。 -->
<-- 通过我们把所有域对象的名字都设置成了 相同的名字之后,发现访问到的 是page 对象所设置的 值 -->

${andy}

${andy}

${andy}

${andy}


<-- 如何来解决这个问题? 可以通过域对象+Scope的方式来访问。 --> ${requestScope.andy}
${sessionScope.andy}
<-- 注意: 在el表达式中获取pageContext 对象,用的是page -->

${pageScope.andy}

${applicationScope.andy}

结论:四个作用域由小到大的排序是:
pageContext < request < session < application

2、使用el表达式获取域对象里面数组、集合(list、map)、对象属性的值

(1)使用el表达式获取域对象里面的数组的值

= 使用数组的下标得到里面的值,数组下标从0开始
= ${域对象名称[数组的下标] }

= 代码

<%
//定义一个字符串数组。
String[] arr = {“aaa”,“bbb”,“ccc”};
//把数组对象,作为request域对象的参数进行保存。
request.setAttribute(“arr”, arr);

%>

<-- 通过el表达式,获取存入的数组的元素值。 -->
${arr[0]}
${arr[1]}
${arr[2]}

= 如果获取的数组的下标不存在,返回是空字符串 “”
//之前我们通过java代码的方式访问不存在的数组的索引对应元素的时候,会报:数组角标越界异常。
//out.println(arr[10]); // java.lang.ArrayIndexOutOfBoundsException: 10

<-- 通过el表达式访问,不存在的数组的角标的时候,不会报错,显示空字符串 “” -->
${arr[10]}

(2)使用el表达式获取域对象里面list集合的值

= 使用list集合的下标获取里面的值,list下标从0开始的
= ${域对象名称[list集合的下标]}
= 代码

<%
//创建一个list集合
List list = new ArrayList();
list.add(“AAA”);
list.add(“BBB”);
list.add(“CCC”);
list.add(“DDD”);

//通过域对象,将list集合存入域对象参数中。
request.setAttribute(“list100”, list);

%>

<-- el表达式获取值 -->
<-- 使用传统方式遍历list,有四种方式
普通for:根据下标得到,下标从0开始
迭代器
增强for
list迭代器
–>
<-- 通过el表达式来获取list集合,并获取里面的值。 -->
${list100[0] }

${list100[1] }

${list100[2] }

${list100[3] }

= 如果获取list集合的下标不存在,返回是空字符串 “”

= 向域对象里面放set集合,使用el表达式不可以获取域对象里面set集合的值
== list和set的区别:list是有序的,set是无序的

(3)使用el表达式获取域对象里面map集合的值
= 根据map的key名称得到对应的value值
= 写法: 域名称 . k e y 名称 = 另外写法: {域名称.key名称} = 另外写法: 域名称.key名称=另外写法:{域名称[“key名称”]}
= 代码

<%
//创建一个map 集合,map是有序的集合,可以用hashMap treeMap‘
Map map = new HashMap();
map.put(“aaa”, “AAA”);
map.put(“bbb”, “BBB”);
map.put(“ccc”, “CCC”);
map.put(“ddd”, “DDD”);

// 把map集合放入域对象中。
request.setAttribute(“map100”, map);

%>

<-- 通过el表达式来获取map集合中的元素。 元素名字找值,通过key找value–>
${map100.aaa}

<-- 如果用el表达式直接访问的是我们存入的map集合的名字,难么就会直接打印出来这个集合。 -->
${map100}

= 如果key的名称不存在,返回是空字符串 “”

= 如果map集合的key的类型是int类型,使用el表达式不能获取里面的值,报错
例如: ${map[3]} // 如果map集合的key 是int 类型。用.获取会报错。[]获取获取不到。

(4)使用el表达式获取域对象里面的对象的属性值

= 使用名称.对象里面的属性的名称得到值
= ${域对象名称.属性的名称}
= 代码
<-- 使用el表达式获取域对象里面对象的属性的值 -->
<%
//创建对象
User user = new User();
user.setUsername(“东方不败”);
user.setPassword(“999”);
//把user对象放到域对象里面
request.setAttribute(“user100”, user);
%>
<-- el表达式获取值 -->
${user100.username }


${user100.password }
= 如果获取的域对象里面的对象的属性名称不存在,报错

3、el表达式的其他操作

3.1 运算的操作

(1)算术的运算 + - …
(2)关系的运算 < > <= >=…
(3)逻辑的运算 && ||…

3.2 empty运算符

(1)判断对象是否为空
= ${user == null}
= ${empty user}

= ${user != null}
= ${not empty user}

3.3 三元表达式

三元表达式类似于,if(){}else{}

(1)${user != null ? user.name : “”}
= 如果user对象不为空,获取user的name值,否则返回空字符串
= ${ not empty user ? user.name : “”}

3.4 在el表达式中有11个隐含对象

(2)pageContext隐含对象:对应于jsp中pageContext内置对象,获取其他的八个内置对象

JSTL标签 (是一个标签库。)

jstl标签库

1、jstl标签库的简介
1.1 jstl:JavaServerPages Standard Tag Library,jsp的标准的标签库
1.2 使用jstl标签库,可以和jsp指令taglib一起使用,替代页面中<% %>
(1)jstl版本 1.0 1.1 1.2

1.3 要使用jstl标签库,导入jstl的jar包(两个jar包)
(1)jstl标签库使用在jsp页面中,需要jsp页面中引入标签库,使用taglib指令引入
= <%@ taglib uri=“jstl标签库的路径” prefix=“jstl标签库的别名” %>
= 找到引入的jar包里面,找到META-INF的c.tld文件,找到
c
http://java.sun.com/jsp/jstl/core
= <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>

(2)写法:

= <c:标签库的名称 属性=“属性值”>

1.4 jstl的入门案例
(1)代码
<-- 嵌入java代码 -->
<%
int m = 10;
if(m == 10) {
%>

m等于10

<% } else { %>

m不等于10

<% } %>
<hr/>
<!-- 使用jstl标签库,把java代码换成jstl表示出来 -->
<!-- 定义一个变量 ,使用jstl里面set标签实现,向域对象里面设置一个值 -->
<c:set var="a" value="20"></c:set>
<!-- 条件判断,使用jstl里面的if标签实现 -->
<c:if test="${a==10 }">

a等于10

a不等于10

2、jstl的if标签

2.1 进行条件判断的标签
2.2 写法 <c:if test=“判断的条件”>
2.3 在jstl中没有 <c:else>标签
2.4 代码
<-- 条件判断,使用jstl里面的if标签实现 -->
<c:if test=“${a==10 }”>

a等于10

a不等于10

3、jstl的forEach标签

3.1 遍历的操作的标签
3.2 使用forEach标签获取域对象里面数组、集合(list、set、map)、多个对象的属性值
3.3 写法:<c:forEach var=“每次遍历的值” items=“域对象里面 ${名称}”>

3.4 使用forEach标签获取域对象里面的数组的值
(1)代码
<-- 使用jstl的foreach标签获取域对象里面的数组的值 -->
<%
//创建数组,把数组放到域对象里面
String[] arr = {“lucy”,“mary”,“jack”};
request.setAttribute(“arr”, arr);
%>
<-- 使用el表达式获取 -->
${arr[0] }

<hr/>
<!-- 使用foreach标签获取 -->
<!-- 

使用增强for循环
for(String a : arr) {}
–>
<c:forEach var=“a” items=“${arr }”>
${a }

</c:forEach>

3.5 使用jstl的forEach标签获取域对象里面的集合中的值
(1)获取域对象里面list集合里面的值
= 代码
<-- 使用jstl的forEach标签获取域对象里面的list集合的值 -->
<%
//创建list集合
List list = new ArrayList();
list.add(“aaaa”);
list.add(“bbbb”);
list.add(“cccc”);
//把list集合放到域对象里面
request.setAttribute(“list”, list);
%>
<-- 使用el表达式获取里面list的值 -->
${list[0] }

<hr/>
<!-- 使用forEach标签获取值 -->
<!-- 

for(String l : list) {}
–>
<c:forEach var=“l” items=“${list }”>
${l }

</c:forEach>

(2)获取域对象里面set集合里面的值
= 使用el表达式不能获取域对象里面的set集合中的值,因为set集合无序的,不能通过下标获取
= 代码
<-- 使用jstl里面的forEach标签获取域对象里面的set集合的值 -->
<%
//创建set集合,把set集合放到域对象里面
Set set = new HashSet();
set.add(“WWW”);
set.add(“QQQ”);
set.add(“TTT”);
request.setAttribute(“set”, set);
%>
<-- 使用el表达式获取 -->
<%-- s e t [ 0 ] − − < − − 使用 f o r E a c h 标签获取 − − > < c : f o r E a c h v a r = " s e t " i t e m s = " {set[0] } --%> <-- 使用forEach标签获取 --> <c:forEach var="set" items=" set[0]<使用forEach标签获取><c:forEachvar="set"items="{set }">
${set }

</c:forEach>

(3)获取域对象里面map集合里面的值
= 使用el表达式获取域对象里面map集合值,根据map的key得到value
= 代码
<-- 使用jstl的foreach标签获取域对象里面map集合值 -->
<%
//创建map,把map集合放到域对象里面
Map<String,String> map = new HashMap<String,String>();
map.put(“aaa”, “AAA”);
map.put(“bbb”, “BBB”);
map.put(“ccc”, “CCC”);
request.setAttribute(“map”, map);
%>
<-- 使用el表达式获取值 -->
${map.aaa }

<hr/>
<!-- 使用foreach标签获取值 -->
<c:forEach var="m" items="${map }">

${m.key } , ${m.value }

</c:forEach>

3.6 使用jstl的forEach标签获取域对象里面多个对象的属性的值

(1)如何把多个对象放到域对象里面
= 可以先把多个对象放到集合里面(list),再把list集合放到域对象里面
= 代码
<-- 把多个对象放到域对象里面 -->
<%
//创建多个对象
User user1 = new User();
user1.setUsername(“东方不败”);
user1.setPassword(“999”);

User user2 = new User();
user2.setUsername(“岳不群”);
user2.setPassword(“444”);

User user3 = new User();
user3.setUsername(“林平之”);
user3.setPassword(“666”);

//把多个对象放到list集合里面
List list = new ArrayList();
list.add(user1);
list.add(user2);
list.add(user3);
//把list集合放到域对象里面
request.setAttribute(“list”, list);
%>

= 获取多个对象的属性值的代码
<-- 使用jstl的foreach标签获取域对象里面多个对象的属性的值 -->
<-- 使用foreach标签获取值 -->
<c:forEach var=“user” items=“${list }”>
${user.username } :: ${user.password }

</c:forEach>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值