【46】
一、EL表达式
传统方式在jsp中获取作用域中的数据
pageEncoding="utf-8"%>
缺陷:
1、书写比较繁琐
2、需要导包
3、需要强转
--%>
使用EL表达式方式获取作用域数据
El表达式的语法:${表达式} 注意:自带响应功能
EL 隐含对象
JSP有9个隐含对象,而EL也有自己的隐含对象。EL隐含对象总共有11 个
El表达式的使用:
1、El表达式获取请求数据
获取用户请求数据(请求实体)
${param.键名} 获取请求实体中一个键一个值的数据
${paramValues.键名} 获取请求实体中同键不同值的数据,返回的是String数组,可以使用角标直接获取 例如:爱好
获取请求头数据
${header} 返回所有的请求头数据,键值对形式
${header["键名"]} 返回指定的键的请求头数据
${headerValues["键名"]}
获取Cookie数据
${cookie}获取所有的Cookie对象 键值对
${cookie.Cookie对象的键名} 获取存储了指定Cookie数据的Cookie对象
${cookie.Cookie对象的键名.name} 获取存储了指定Cookie数据的Cookie对象的存储的键
${cookie.Cookie对象的键名.value}获取存储了指定Cookie数据的Cookie对象的存储的值
2、EL表达式获取作用域数据
作用域对象:pageContext request session application
作用域数据:我们使用setAttribute方法存储的数据
获取:
普通字符串数据 ${键名}
对象数据 ${键名.属性名}
集合数据
list集合 ${键名[角标]}
Map集合 ${map集合作用域存储的键名.map集合存储的数据的键名}
作用域数据查找顺序:如果找到了则不再查找,如果找不到,则继续查找下一个作用域,如果四个作用域中都没有则什么都不显示
pageContext-->request-->session-->application
指定作用域获取数据:${pageScope.键名} 指明获取pageContext作用域中的数据
${requestScope.键名}指明获取request作用域中的数据
${sessionScope.键名}指明获取session作用域中的数据
${applicationScope.键名}指明获取application作用域中的数据
二、EL表达式逻辑运算
算术运算:+,-,*,/ 在EL表达式中可以直接进行算术运算
${算术表达式} 例如 :${1+2}
注意:+表示算术运算,不能进行字符串连接
逻辑运算:&& || !
${逻辑表达式} 注意:没有单& 和单|
比较运算:== != >,>=,
${比较表达式}
三目运算:${条件?值:值}
三、EL表达式的empty判断
${empty 键名}
作用:判断该键是否有存储有效数据
${str}
${user.fav}
${list[2]}
${list[3].fav}
${hs.b1}
${hs.u.fav}
获取用户请求数据(请求实体)
--${param.uname}
--${paramValues.fav[1]}
获取用户请求头数据
--${header["User-Agent"]}
--${headerValues["Accept-Language"][0]}
获取Cookie数据
${cookie}
${cookie.JSESSIONID}
${cookie.JSESSIONID.name}--${cookie.JSESSIONID.value}
EL获取作用域数据时作用域的查找顺序
pageContext.setAttribute("hello", "hello pageContext");
request.setAttribute("hello","hello request");
session.setAttribute("hello", "hello session");
application.setAttribute("hello", "hello application");
%>
${requestScope.hello}--${a}
EL表达式的逻辑运算
request.setAttribute("a","2");
%>
${1+2}--${2*3}--${a+3}--${1+"5"}
${2>3&&4<5}--${2>3||4<5}--${!(2>3)}
${2==2}--${3>2}
${2>3?"男":"女"}
EL表达式的empty判断
request.setAttribute("str","");
User u=new User();
request.setAttribute("u", u);
ArrayList la=new ArrayList();
request.setAttribute("la",la);
%>
${empty str}
${empty u}
${empty la}
二、JSTL标签库
JSTL学习:
作用:在jsp页面使用其可以非常方便的进行数据的处理。较与使用java代码块方法,更加的简单,代码更加的简洁易读。
使用:核心标签库
流程: 1、导入jar包 2、引入标签库
基本标签:
1、out标签:
作用:结合EL表达式将数据响应给浏览器,如果EL表达式没有取到数据则可以使用default属性声明默认值。
2、set标签:
作用:将数据存储到指定的作用域中,默认是pageContext作用域
注意: scope的值为:page request session application
3、remove标签:
作用:删除作用域中的数据,默认是删除四个作用域中的符合要求的数据。但是可以通过scope属性指明要删除的作用域数据。
注意:使用pageContext.removeAttriute("键名"),此方法会将四个作用域中的符合要求的数据全部删除
1、使用pageContext.removeAttriute(String name,int scope)
指明要删除的作用域中的数据 scope的值为 1pageContext,2request ,3 session,4 application
2、使用request.removeAttibute("键名") 删除当前作用域符合要求的数据
3、使用session.removeAttibute("键名") 删除当前作用域符合要求的数据
4、使用application.removeAttibute("键名")删除当前作用域符合要求的数据
逻辑标签:
1、单分支判断标签:数据
作用:可以根据el表达式进行一定程度的单分支逻辑判断。
注意:test属性中书写的是EL表达式,或者说是EL表达式的逻辑表达式。该标签只能进行EL表达式相关的逻辑判断。不能进行EL表达式不能获取的数据的逻辑处理
2、多分支判断标签:
..
注意:符合条件后只会执行一个分支,其他分支不会执行。
3、循环标签:
循环体
属性: begin:声明循环的开始位置
end:声明循环的结束位置
step:声明循环的步长
varStatus:声明变量记录循环状态 ,例如变量名:i
注意:记录的数据存储到了作用域中可以直接使用El表达式进行获取${i.index} 获取当次循环的下标
${i.count} 获取当次循环的次数
${i.first} 判断是否是第一次循环
${i.last}判断是否是最后一次循环
items:声明要遍历的数据,可以是集合和数组等。注意:要使用EL表达式来获取
var:声明变量记录每次遍历的结果。可以做循环体中使用使用EL表达式获取遍历出来的数据
JSTL学习:
request.setAttribute("str","jstl学习");
%>
--${str}--
default="我是out标签">
request.setAttribute("s1","set标签学习");
%>
${s1}--${requestScope.s2}
pageContext.removeAttribute("hello",4);
//request.removeAttribute("hello");//session.removeAttribute("hello"); %> --%>
${hello}
int b=4;
int a=Integer.parseInt((String)pageContext.getAttribute("a"));
if(a>8){
%>
今天天气真好,适合学习1
今天天气真好,适合学习2
奖励苹果电脑一台
奖励苹果手机一部
无奖励无惩罚
男女混合双打
我是第三次循环
11111--${i.index}--${i.count}--${i.first}--${i.last}
//创建测试数据listArrayList list=new ArrayList();
list.add("苹果");
list.add("榴莲");
list.add("荔枝");
//将list存储到作用域中request.setAttribute("list",list);
%>
${s}--${i.index}--${i.count}
//声明Map集合测试数据HashMap hs=new HashMap();
hs.put("s1","唱歌");
hs.put("s2", "跳舞");
hs.put("s3", "敲代码");
//将数据存储到作用域中request.setAttribute("hs", hs);
%>
${s.key}--${s.value}