【javaWeb】EL与JSTL

目录

  • EL表达式(Expression Language)
    • EL和JSP脚本的区别
    • 语法
    • EL操作符
    • EL运算符
      • 注意
    • EL功能
    • EL访问作用域
    • 隐式对象
      • 示例1:获得应用上下文
      • 示例2:获取Cookie对象
  • JSTL(JavaServerPages Standard Tag Library)
    • JSTL使用步骤
    • JSTL标签分类
    • 使用
      • 1.条件标签if判断
      • 2.多条件choose判断
      • 3.迭代foreach标签
      • \<fmt:formatDate/>标签
      • 其他
    • 总结

EL表达式(Expression Language)

  • EL使得JSP写起来更简单、简洁。主要用于获取作用域中的数据(如:request.getAttribute())
  • 便于和html相结合

EL和JSP脚本的区别

  • <%=request.getAttribute() %>没有找到返回null
  • ${requestScope.name} 没找到返回" "

语法

${EL 表达式} 例如:${username}

EL操作符

  • 操作符“.”
    获取对象的属性,例如:${news.title}
  • 操作符“[]”
    获取对象的属性,例如:${news["title"]}
    获取集合中的对象,例如:${newsList[0]}

EL运算符

运算符说明
( )改变执行的优先级,例如${3*(4+5)}
+,-,*,/,%算术运算符,例如${3+2}
==,!=,>,>=,<,<=关系运算符,例如 a = = b 或 {a==b}或 a==b{a eq b}
&&,||,!逻辑运算符,例如${true&&false}
?:条件运算符,例如${a>b?1:2}
empty用于检测变量名是否为空,是否等于NULL,例如${empty name}
关系运算符范例结果
== 或 eq${5 == 5}或${5 eq 5}true
!= 或 ne${5 != 5}或${5 ne 5}false
< 或 lt${3 < 5}或${3 lt 5}true
> 或 gt${3 > 5}或${3 gt 5}false
<= 或 le${3 <= 5}或${3 le 5}true
>= 或 ge${3 >= 5}或${3 ge 5}false

注意

${param.password1} == ${param.password2} ——语法错误
${ ${param.password1 } == ${ param.password2 } }——语法错误
${ param.password1 == param.password2 } ——语法正确

EL功能

  • 取得JavaBean对象的属性
    ${news.title}
  • 取得数组、List、Map类型对象的元素
    ${list[0]}
  • 使用各类运算符对原始数据进行简单处理
    ${totalRecordCount/pageSize}
  • 屏蔽一些常见的异常
    ${username}
  • 能实现简单的自动类型转换
    ${news}相当于(News)request.getAttribute(“news”)

EL访问作用域

request.setAttribute("news", news);
//两种方式取数据:
//使用Java小脚本:
request.getAttribute("news");
//使用EL表达式:    
${ news } 或者 ${ requestScope.news }
作用域Java代码取值EL取值
请求作用域request.getAttribute(“news”);${ requestScope.news }
会话作用域session.getAttribute(“username”);${ sessionScope.username }
程序作用域application.getAttribute(“count”);${ applicationScope.count }
页面作用域pageContext.getAttribute(“userNum”);${ pageScope.userNum }

隐式对象

隐含对象描述
pageScopepage作用域
requestScoperequest作用域
sessionScopesession作用域
applicationScopeapplication作用域
paramRequest对象的参数,字符串
paramValuesRequest对象的参数,字符串集合
headerHTTP信息头,字符串
headerValuesHTTP信息头,字符串集合
initParam上下文初始化参数
cookieCookie值
pageContext当前页面的PageContext

示例1:获得应用上下文

(获取路径以后用的很多,防止404)

<%String contextPath = request.getContextPath();%><%=contextPath%>
<%--    jsp写法--%><a href="<%=request.getContextPath()%>/manager/safe/xxServlet">点我</a>
<%--el的表达式写法--%><a href="${pageContext.request.contextPath}/manager/safe/xxServlet">点我</a>

示例2:获取Cookie对象

<%// 添加cookie  Cookie cookie = new Cookie("username","xiaoming");response.addCookie(cookie);
%><br>
// 界面必须请求两次才能拿到 cookie 应为 我们获取的cookie是从request对象中获取的,第一次还没有没有 对应的username
${cookie.username.name}//获取名为username的cookie对象<br>
${cookie.username.value}//获取名为password的cookie对象

JSTL(JavaServerPages Standard Tag Library)

  • JSP标准标签库
  • 实现JSP页面中的逻辑控制

JSTL使用步骤

  1. 引入依赖
    	<dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-jstlel</artifactId><version>1.2.5</version></dependency>
    
  2. 在JSP页面中添加指令
    <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>

JSTL标签分类

标签库名称资源标示符(uri)前缀(prefix)
核心标签库http://java.sun.com/jsp/jstl/corec
国际化/格式化标签库http://java.sun.com/jsp/jstl/fmtfmt
XML标签库http://java.sun.com/jsp/jstl/xmlx
数据库标签库http://java.sun.com/jsp/jstl/sqlsql
函数标签库http://java.sun.com/jsp/jstl/functionsfn

使用

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

1.条件标签if判断

语法:<c:if test =“条件”> < /c:if>

	<!-- test属性中是条件,但是条件需要使用EL表达式来书写 --><h3>条件标签:if</h3><c:if test="${8>2 }">8大于2是成立的</c:if><c:if test="${8<2 }">8小于2是成立的</c:if>

2.多条件choose判断

语法:
<c:choose >
 <c:when test=“条件1”>结果1< /c:when>
 <c:when test=“条件2”>结果2< /c:when>
 <c:when test=“条件3”>结果3< /c:when>
 <c:otherwise >结果4< /c:otherwise>
< /c:choose>

<h3>条件标签:choose(等价于java中多重if)</h3>
<%-- 测试成绩等级 >90 优秀   >80  良好    >70 中等   >60及格--%>
<c:set var="score" value="80"></c:set>
<c:choose><c:when test="${score>=90 }">优秀</c:when><c:when test="${score>=80 }">良好</c:when><c:when test="${score>=70 }">中等</c:when><c:when test="${score>=60 }">及格</c:when><c:otherwise>不及格</c:otherwise>
</c:choose>

3.迭代foreach标签

语法:
<c:foreach var=“变量名” items=“集合” begin=“起始下标” end=“结束下标” step=“间隔长度” varstatus=“遍历状态”>< /c:foreach>

  <h3>测试list集合遍历获取学生列表</h3><table border="1" width="80%" bordercolor="red" cellspacing="0"align="center"><tr><th>学号</th><th>姓名</th><th>成绩</th><th>班级</th><th>是否是第一个</th><th>是否是最后一个</th><th>计数count</th><th>索引index</th></tr><!-- varStatus:变量状态:遍历出的每一项内容的状态:first 是否是第一行last  是否是最后一行count 当前行数index 当前元素的下标--><!-- var :遍历出的每一项使用变量先存储items:集合(使用El表达式)--><c:forEach var="stu" items="${students}" varStatus="vs"><tr><td>${stu.id}</td><td>${stu.name}</td><td>${stu.score}</td><td>${stu.classes}</td><td>${vs.first}</td><td>${vs.last}</td><td>${vs.count}</td><td>${vs.index}</td></tr></c:forEach></table>

<fmt:formatDate/>标签

<fmt:formatDate/>格式化标签:实现格式化的日期和时间显示

<fmt:formatDate  value="date"  pattern="yyyy-MM-dd HH:mm:ss"/>

其他

<c:url/>超链接标签

<c:url  value="url" />

<c:param/>参数标签

<c:param name="name"  value="value"/>

<c:import/>导入标签

<c:import url="URL" />

总结

标签名称作用
<c:out />输出文本内容到out对象,常用于显示特殊字符,显示默认值
<c:set/>在作用域中设置变量或对象属性的值
<c:remove/>在作用域中移除变量的值
<c:if/>实现条件判断结构
<c:forEach/>实现循环结构
<c:url/>构造url地址
<c:param/>在url后附加参数
<c:import/>在页面中嵌入另一个资源内容
fmt:formatDate/格式化时间
fmt:formatNumber/格式化数字

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【免费题库】华为OD机试 - 单词重量(Java JS Python C C++)

须知 哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 文章目录 须知题目描述输入描述输出描述用例解题思路:Java代码:JS代码:Python代码:C代码:C++代码:题目描述 每个句子由多个单词组成,句子中的每个单词的长度都可能不一样,…

【六 (3)机器学习-机器学习建模步骤/kaggle房价回归实战】

目录 文章导航一、确定问题和目标&#xff1a;1、业务需求分析&#xff1a;2、问题定义&#xff1a;3、目标设定&#xff1a;4、数据可行性评估&#xff1a;5、资源评估&#xff1a;6、风险评估&#xff1a; 二、数据收集&#xff1a;1、明确数据需求2、选择数据来源3、考虑数据…

SpringCloud Alibaba Seata 处理分布式事务

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十八篇&#xff0c;即使用 Seata 处理分布式事务。 二、分布式事务问题 当单体应用被拆分成微服务应用…

实现虚拟机Ubuntu与主机Windows之间的复制粘贴

实现步骤 在虚拟机Ubuntu界面&#xff0c;CtrlAltT&#xff0c;新建一个终端 # 卸载已有的工具 sudo apt-get autoremove open-vm-tools# 安装工具open-vm-tools sudo apt-get install open-vm-tools# 安装open-vm-tools-desktop sudo apt-get install open-vm-tools-desk…

【超简单】基于PaddleSpeech搭建个人语音听写服务

一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你…

在Android中使用MediaPlayer播放音频和视频

在播放音频中SoundPool是个很好用的类&#xff0c;但是SoundPool只能播放音频&#xff0c;且通常只用来播放较短的音频&#xff0c;这就需要另外的类来实现视频和长音频的播放&#xff0c;那就是MediaPlay 实现MediaPlay的基本步骤是 创建MediaPlay对象调用setDataSource对象…

代码随想录算法训练营Day48|LC198 打家劫舍LC213 打家劫舍IILC337 打家劫舍III

一句话总结&#xff1a;前两题白给&#xff0c;第三题树形DP有点难。 原题链接&#xff1a;198 打家劫舍 滚动数组直接秒了。 class Solution {public int rob(int[] nums) {int n nums.length;int first 0, second nums[0];for (int i 2; i < n; i) {int tmp Math.m…

如何开始用 C++ 写一个光栅化渲染器?

光栅化渲染器是计算机图形学中最基础且广泛应用的一种渲染技术&#xff0c;它将三维模型转化为二维图像。下面我们将逐步介绍如何使用C语言从零开始构建一个简单的光栅化渲染器。 一、理解光栅化渲染原理 光栅化是一种将几何数据&#xff08;如点、线、三角形&#xff09;转换…

电商选品难?那是因为你不会用大数据选品工具…

电商选品之所以难&#xff0c;主要有以下几个方面的原因。电商市场更新换代非常快&#xff0c;新的产品不断涌现&#xff0c;旧的产品可能很快就被淘汰。电商选品紧跟市场趋势&#xff0c;不断调整和更新&#xff0c;这对电商运营市场敏感度和反应速度提出了很高的要求。 电商…

110V降9V1A非隔离降压恒压WT5112

110V降9V1A非隔离降压恒压WT5112 嘿&#xff0c;让我来给你说说这个WT5112控制芯片。这可是个厉害的东西&#xff0c;特别适合用在充电器啊、适配器啊还有LED灯这些地方。它最牛的地方就是能稳稳地控制电压和电流&#xff0c;而且还有个什么原边反馈技术让控制得更准。更酷的是…

MySQL_00001_00000

数据准备 员工表&#xff1a;emp Oracle: create table emp ( empno number(4) not null, ename varchar2(10), job varchar2(9), mgr number(4), hiredate date, sal number(7, 2), comm number(7, 2), deptno number(2) ); insert into em…

数据库讲解---(SQL语句--表的使用)【MySQL版本】

零.前言 数据库讲解&#xff08;MySQL版&#xff09;&#xff08;超详细&#xff09;【第一章】-CSDN博客 数据库-ER图教程_e-r图数据库-CSDN博客 数据库讲解&#xff08;MySQL版&#xff09;&#xff08;超详细&#xff09;【第二章】【上】-CSDN博客 一.SQL概述 1.1SQL简…

组合逻辑电路中的竞争与冒险

竞争与冒险 进行理想的组合逻辑电路分析与设计时&#xff0c;没有考虑逻辑门的延迟时间&#xff08;原因&#xff09;对电路产生的影响&#xff0c;且认为电路的输入和输出均处于稳定的逻辑电平。 实际上&#xff0c;信号经过逻辑门需要一定的时间。不同路径上门电路数目不同…

【Qt】文件与音视频

目录 一、输入输出设备类 二、文件读写类 三、文件和目录信息类 四、音视频 4.1 音频 4.2 视频 文件操作是应用程序必不可少的部分。Qt作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt提供了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操作…

杂谈 EV之我见

每周至少更新一片博文&#xff0c;没有目的的看代码是没有效率的&#xff0c;带着目的去看代码才会有所得&#xff0c; 目前车载行业火爆&#xff0c;得益于EV和AI技术的发展&#xff0c;汽车从一个传统工业产品&#xff0c;摇身一变成为了前沿科技产品。 小米su7的发布会我看…

LeetCode刷题之94.二叉树中序遍历

文章目录 1. 描述2. 分析2.1 递归方法2.2 迭代 3. 解答3.1 递归3.2 迭代 1. 描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&#xff1a;ro…

C++ //练习 12.3 StrBlob需要const版本的push_back和pop_back吗?如果需要,添加进去。否则,解释为什么不需要。

C Primer&#xff08;第5版&#xff09; 练习 12.3 练习 12.3 StrBlob需要const版本的push_back和pop_back吗&#xff1f;如果需要&#xff0c;添加进去。否则&#xff0c;解释为什么不需要。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1…

浏览器工作原理与实践--页面性能:如何系统地优化页面

在前面几篇文章中&#xff0c;我们分析了页面加载和DOM生成&#xff0c;讨论了JavaScript和CSS是如何影响到DOM生成的&#xff0c;还结合渲染流水线来讲解了分层和合成机制&#xff0c;同时在这些文章里面&#xff0c;我们还穿插说明了很多优化页面性能的最佳实践策略。通过这些…

【C语言】扫雷小游戏

文章目录 前言一、游戏玩法二、创建文件test.c文件menu()——打印菜单game()——调用功能函数&#xff0c;游戏的实现main()主函数 game.c文件初始化棋盘打印棋盘随机布置雷的位置统计周围雷的个数展开周围一片没有雷的区域计算已排查位置的个数排查雷(包括检测输赢): game.h文…

【剪映专业版】04全局设置

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 设置-全局设置 草稿 草稿位置&#xff1a;非系统盘&#xff08;C盘&#xff09; 素材下载位置与 缓存管理&#xff1a;如果下载素材较多&#xff0c;需要定期删除缓存 预设保存位置&#xff1a;非系统盘&#xff08;C盘&a…