el表达式的语法_SXT DAY054 El 表达式和 Jstl 标签库

EL 表达式

全称:Expression Language,一种写法非常简洁的表达式。语法简单易懂,便于使用。表达式语言的灵感来自于 ECMAScript 和 XPath

传统方式在jsp中获取作用域的数据的缺陷

  • 书写比较繁琐
  • 需要导包
  • 需要强转
<

af4fe601f36dcae6d01b53379c8f7e66.png

EL 表达式的作用

让 jsp 书写起来更加的方便。简化在 jsp 中获取作用域或者请求数据的写法。也会搭配 Jstl 来进行使用。

<

e3ebd845af6e03e7b4ed2f9d721b376a.png

语法结构:${表达式} 自带响应功能

El表达式的使用

El表达式获取请求数据

获取用户请求数据(请求实体)

  • ${param.键名} 获取请求实体中一个键一个值的数据
  • ${paramValues.键名} 获取请求实体中同键不同值的数据,返回的是String数组,可以使用角标直接获取 例如:爱好
<

60ee51af7cccce5124f70096c640772a.png

获取请求头数据

  • ${header} 返回所有的请求头数据,键值对形式
  • ${header["键名"]} 返回指定的键的请求头数据
  • ${headerValues["键名"]} 返回指定键名的多个值
<

2316d460a7b6be9d8f00199e3d2336a2.png

获取Cookie数据

  • ${cookie} 获取所有的Cookie对象 键值对
  • ${cookie.Cookie对象的键名} 获取存储了指定Cookie数据的Cookie对象
  • ${cookie.Cookie对象的键名.name} 获取存储了指定Cookie数据的Cookie对象的存储的键
  • ${cookie.Cookie对象的键名.value}获取存储了指定Cookie数据的Cookie对象的存储的值
<

d0031b48375229f8e920b54c8a16c450.png

EL表达式获取作用域数据

作用域对象:pageContext request session application

作用域数据:我们使用setAttribute方法存储的数据

获取:

  • 普通字符串数据 ${键名}
  • 对象数据 ${键名.属性名}
  • 集合数据:list集合 ${键名[角标]}
  • 集合数据:Map集合 ${map集合作用域存储的键名.map集合存储的数据的键名}

作用域数据查找顺序:如果找到了则不再查找,如果找不到,则继续查找下一个作用域,如果四个作用域中都没有则什么都不显示

pageContext->request->session->application

指定作用域获取数据:

  • ${pageScope.键名} 指明获取pageContext作用域中的数据
  • ${requestScope.键名} 指明获取request作用域中的数据
  • ${sessionScope.键名} 指明获取session作用域中的数据
  • ${applicationScope.键名} 指明获取application作用域中的数据
<

9651cf2d53dd9d7721f4188f7423cbe6.png

EL表达式逻辑运算

算术运算 +,-,*,/ 在EL表达式中可以直接进行算术运算

${算术表达式} 例如 :${1+2}

注意:+表示算术运算,不能进行字符串连接

逻辑运算 && || !

${逻辑表达式}

注意:没有单& 和单|

比较运算 == != >,>=,<,<=

${比较表达式}

三目运算

${条件?值:值}

<

09a4131f3f1ddfb18e6f9d4ec450c932.png

EL表达式的empty判断

${empty 键名} 作用:判断该键是否有存储有效数据

empty关键字用于判断是否为空(当值为null或者是没有内容时),返回true,否则返回false

not empty(!empty)用于判断是否非空(当值不为null或者是有内容时),返回true,否则返回false

<

690bdcdbc94494a1350323137c690237.png

JSTL的概念

JSTL:JSP标准标签库,是apache针对EL表达式的扩展。

JSTL的作用:用来提升在 JSP 页面的逻辑代码的编码效率,使用标签来替换逻辑代码的直接书写,高效,美观,整洁,易读

JSTL库的分类:

  • 通用标签:c作为前缀(掌握):if标签,forEach标签
  • 格式化标签(格式化处理):fmt作为前缀(掌握):formatDate标签(格式化展示日期)
  • 函数标签(调用函数):fn作为前缀(了解)
  • XML标签(操作xml文档):了解
  • SQL标签(执行SQL语句):了解

标签的使用步骤:

  1. 下载jstl的jar文件,并添加到项目中(如果利用myeclipse创建的web项目自动添加)
  2. 使用taglib指令引入标签库: <%@taglib uri="标签库的uri" prefix="标签的前缀"%>
  3. 使用标签
  • 引入标签库<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

基本标签

out标签:

<c:out value="${表达式}" default="默认值"></c:out>

作用:结合EL表达式将数据响应给浏览器,如果EL表达式没有取到数据则可以使用default属性声明默认值。

set标签:

 <c:set value="数据" var="键名" scope="作用域名"></c:set>

作用:将数据存储到指定的作用域中,默认是pageContext作用域

注意:scope的值为:page request session application

remove标签:

<c:remove var="要删除数据的键名" scope="作用域名"/>

作用:删除作用域中的数据,默认是删除四个作用域中的符合要求的数据。但是可以通过scope属性指明要删除的作用域数据。

注意:

  • 使用pageContext.removeAttriute("键名"),此方法会将四个作用域中的符合要求的数据全部删除
  • 使用pageContext.removeAttriute(String name,int scope)指明要删除的作用域中的数据 scope的值为 1pageContext,2request ,3 session,4 application
  • 使用request.removeAttibute("键名") 删除当前作用域符合要求的数据
  • 使用session.removeAttibute("键名") 删除当前作用域符合要求的数据
  • 使用application.removeAttibute("键名") 删除当前作用域符合要求的数据
<

44f0f3ad73dff759e39c108d4791c2f0.png

逻辑标签:

单分支判断标签 (if标签):等同于java中的if结构(判断)

<c:if test="${表达式}">数据</c:if>

作用:可以根据el表达式进行一定程度的单分支逻辑判断。

注意:test属性中书写的是EL表达式,或者说是EL表达式的逻辑表达式。

该标签只能进行EL表达式相关的逻辑判断。不能进行EL表达式不能获取的数据的逻辑处理

<!-- 单分支判断标签 -->
 

a9c4315bf283cc3fc3c3faa13a8fc13a.png

多分支判断标签 choose/when标签(判断):等同于java中的多重if...else if结构

<

注意:符合条件后只会执行一个分支,其他分支不会执行。

<!--多分支逻辑判断  -->
 

f245890505058179e1c416f212b664db.png

循环标签 forEach标签(循环):等同于java中的高级for-each循环

<c:foreach>
     循环体
</c:foreach>

属性:

  • begin:声明循环的开始位置
  • end:声明循环的结束位置
  • step:声明循环的步长
  • varStatus:声明变量记录循环状态 ,例如变量名:i

注意:记录的数据存储到了作用域中可以直接使用El表达式进行获取

示例

  1. ${i.index} 获取当次循环的下标
  2. ${i.count} 获取当次循环的次数
  3. ${i.first} 判断是否是第一次循环
  4. ${i.last}判断是否是最后一次循环
  • items:声明要遍历的数据,可以是集合和数组等

注意:要使用EL表达式来获取

  • var:声明变量记录每次遍历的结果。可以做循环体中使用使用EL表达式获取遍历出来的数据
<!--循环标签  -->
 

0cc1ce80f7159e0cc1a8b781dc123914.png

循环标签遍历集合

遍历List集合

<!-- 遍历List集合 -->
 

14a6680dd939f34bb7389fd2208975d7.png

遍历map集合

<!--遍历map集合  -->
 

85aa4543727dc6fe8d856cc5f963211f.png

fmt标签(格式化)

<%
   	Date now=new Date();
	request.setAttribute("now", now);
%>
 ${now} 

3574494c56ffe8c3edb51ea87654a0dc.png

El 表达式和 Jstl 修改项目

创建用户信息界面(userList.jsp) 复制模板 更改<tr>中的信息 点击查询用户信息请求发送DataServlet 在DataServlet中创建selUserInfo方法 获取所有的用户信息 将数据存储进request作用域对象中,请求转发给userList.jsp 在userList.jsp中获取DataServlet中流转过来的用户数据,显示给浏览器。

userList.jsp

<%@ page language="java" import="java.util.*,com.sxt.pojo.*" pageEncoding="utf-8"%>

DataServlet中的selUserInfo方法

//查询用户信息

login.jsp中登录和注册代码的修改

<!--声明jstl代码块  -->
                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值