el表达式和jstl标签库

2023-11-16

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>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

el表达式和jstl标签库 的相关文章

  • 如何在jsp中使用javascript动态创建下拉框?

    我正在尝试动态创建下拉框 就像当我单击添加按钮时它必须创建新的下拉框 下拉列表还包含动态值 例如需要当前年份并且必须显示最多五年 请建议我这样做 谢谢 这是我尝试过的代码 JavaScript 代码 function Add var nam
  • JSP 和 scriptlet

    我知道现在使用 scriptlet 被认为是禁忌 没关系 我会同意Top Star的话 因为我目前只是Java新手 到目前为止我听到的是 它是为了让设计师的生活更轻松 但我想知道 这是否与JSP页面的性能有关 另一方面 如果只是为了 让设计
  • Struts 2 Action 标签,检索属性

    如果我有一个典型的设置 其中包含转发到 JSP 的操作 我会像这样请求我的属性
  • 如何在 Struts 2 中访问 OGNL 跟踪评估?

    有人告诉我要优化网络应用程序 为此 我使用JProfiler https www ej technologies com products jprofiler overview html 我注意到很大一部分响应时间都花在了表示层上 特别是当
  • 使用后退/前进按钮时,将页面重定向到自定义页面,而不是默认显示“网页已过期”

    我正忙于一个只有一个页面的网站 只有登录后才能访问 home jsp 一旦用户使用有效会话登录 如果他按下浏览器上的后退按钮 那么他应该被重定向到login jsp如果他按下浏览器的前进按钮 则会再次出现 他应该无法到达home jsp所以
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • 我可以使用 jsp 标签在加载时隐藏输入字段吗

    我需要根据请求属性的值隐藏页面加载时的字段 我不想要 隐藏 字段 因为我想再次显示它 我不想用 JavaScript 来做到这一点 这是如何用 jsp 标签完成的 在 EL 中使用条件运算符 div class where hide 是请求
  • 使用 jstl 进行调试 - 具体如何进行?

    我一直试图理解BalusC的回答 https stackoverflow com questions 3177733 how to avoid java code in jsp files关于可调试性 我仍然无法弄清楚 jstl 标签如何比
  • 将 JSON 发送到 Spring MVC 控制器

    我正在尝试将 JSON 发送到 Spring MVC 控制器 在 Spring MVC 方面 一切都配置正确 下面是代码 但似乎没有运行
  • Eclipse jsp 编辑器中出现错误

    我在 jsp 文件中遇到错误 在 X 行上 但这一切似乎都是正确的
  • 使用 jstl 访问完整的 url,包括主机名

  • 在 JSTL 中使用枚举

    我正在尝试使用 jstl 进行一些网站开发 但遇到了 出现以下问题 这里我试图创建一个下拉列表 其中显示的值是 国家名称 值为国家代码 为了做到这一点我 在后端java代码中有以下枚举 public static enum CountryC
  • 如何在java script/jsp中查找客户端计算机名称?

    我的打印应用程序必须获取客户名称 然后打印文档 如何在java脚本或jsp中找到它 我在这里搜索过 有些人正在讨论 PHP 等等 关于运行安全小程序来获取客户端计算机名称的讨论 如果是这样 请给我一个例子来做到这一点 谢谢大家 你不能用 J
  • 会话在选项卡之间共享

    我有 JAVA Web 应用程序 我需要停止在浏览器选项卡之间共享会话 这意味着 用户打开浏览器 登录其帐户并在同一浏览器的新选项卡中打开特定页面 根据默认设置 会话将共享到新选项卡 并且用户会自动登录到新选项卡 谁能告诉我如何阻止这种情况
  • 仅当 css 文件存在时才将其包含在 jsp 中

    我正在尝试使用默认 css 设计一个应用程序 我想要一个选项 我可以包含新的 css 自定义 文件来更改默认皮肤 我可以通过在 jsp 页面中引用 自定义和默认 css 来实现此目的 其中默认值将始终存在 并且可以为不同用户加载自定义 cs
  • Maven 依赖项 jar 内的 Taglib。如何在 web.xml 中配置此标签库?

    所以我曾经这样配置我的标签库
  • jstl/jsp - 迭代 beans 向量

    我有一个 bean 向量 其中包含我想要在 jsp 页面中显示的信息 我目前只是使用标准 java 表达式来显示它 我想研究使用 jstl 来分离关注点 这可能吗 如何实现 我一直在谷歌搜索 但似乎找不到任何东西 我认为你正在寻找的是 ta
  • 在 javascript 中循环 html 复选框

    实际上我有一个关于如何在java脚本中循环复选框的问题 假设我在jsp循环中创建了html复选框 我希望在javascript中对这些复选框进行验证 我应该怎么做 通常对于单个对象 我们可以执行 window document form c
  • 如何修复XSS漏洞

    我们正在使用 fortify 扫描 java 源代码 它抱怨以下错误 Method abc sends unvalidated data to a web browser on line 200 which can result in th
  • 无法使用 Struts 2 重定向 JSP 文件并显示值

    我创建了一个简单的程序 使用文本字段获取用户的名字和姓氏 但问题是 当我单击提交按钮时 我无法将其重定向到另一个显示用户名字和姓氏的 jsp 文件 这是我的HelloAction class package com novamsc trai

随机推荐

  • Java如何用JDBC操作数据库(新手入门级)

    引入相关依赖包 想要用JDBC操作数据库 我们就必须要下载JDBC相关的依赖 这些依赖其实就是我们用来操作数据库的代码 那么什么是JDBC呢 JDBC就是 Java DataBase Connectivity 的简称 是数据库连接的意思 J
  • MapXtreme 2005 for .Net系列------MapControl初尝

    这一段时间在闲暇时看看mapXtreme 2005 for net 自己觉得与AE庞大复杂的结构相比 mapXtreme 可谓简单点 由于规模比较小 所以理解起来比较简单 本来先发一篇综述的帖子 不过由于条件的限制 自己现将这篇帖子发出来
  • 独家

    翻译 张媛 校对 卢苗苗 本文共8269字 建议阅读10分钟 用代码将你的数据集进行多维可视化 介绍 描述性分析是与数据科学或特定研究相关的任何分析生命周期中的核心组成部分之一 数据聚合 汇总与可视化是支撑数据分析这一领域的主要支柱
  • 通过css设置filter 属性,使整个页面呈现灰度效果,让整个网页变灰

    通过css设置filter 属性设置页面整体置灰 效果图 通过设置 filter 属性为 grayscale 100 页面中的所有元素都会被应用灰色滤镜效果 使整个页面呈现灰度效果 filter 属性是用来给元素添加不同的滤镜 graysc
  • Qt自定义界面类并提升(提升的窗口部件),把OpenGL绘制的图形显示在QT的ui界面上

    编译环境 Qt Creator 5 4 0 mingw 最近利用QT做一个上位机界面 想用OpenGL将STL文件还原成三维模型 并将模型显示出来 那么问题来了 最简单的显示就直接创建一个窗口显示模型 根本就 没有用到QT的ui界面 现在的
  • JAVA区块链实战教程-杨长江-专题视频课程

    JAVA区块链实战教程 256人已学习 课程介绍 国内第一套以java语言讲解区块链原理的教程 包含实际项目和代码 让java从业人员 快速了解区块链和区块链原理 课程收益 1 区块链理论 以node js例子区块链原理有深刻理解 2 区块
  • 一个简单的外部系统调用接口日志记录demo

    一 实现思想 抽取接口共方法 作为抽象类 然后不同业务实现类继承此抽象类 实现具体业务 分析可知公共部分就是将外系统入参和接口返回参数记录到数据库 将其抽取出来 作为基础抽象类的公共方法 业务类继承此抽象类 使得不用在每一个业务实现类里面重
  • Selenium基础 — Selenium自动化测试框架介绍

    1 什么是selenium Selenium是一个用于Web应用程序测试的工具 只要在测试用例中把预期的用户行为与结果都描述出来 我们就得到了一个可以自动化运行的功能测试套件 Selenium测试套件直接运行在浏览器中 就像真正的用户在操作
  • spring+springMVC+MyBatis 分页功能代码封装

    页面效果图展示 分页工具类 Pagination package com wlsq kso util import java io Serializable import java util ArrayList import java ut
  • 【uniapp】原生子窗体subNvue的使用与踩坑

    需求 最近接到个需求 需要在video组件上弹出弹窗 也就是覆盖video这个原生组件 未播放时 弹窗可以覆盖 但是当video播放时 写的弹窗就覆盖不了了 因为video是原生组件 层级非常高 普通标签是覆盖不了的 map标签同理 覆盖原
  • 【前端】Bad control character in string literal in JSON解决方案(详解),JSON.parse(str)/Uncaught SyntaxEr报错解决方法。

    问题描述 let text fail station FSW WELDING DRY 2 r n fail resourceid 200118223 r n fail timestamp 2022 12 17 JSON parse text
  • 宝塔部署Springboot项目与踩坑

    目录 1 宝塔硬件方面 2 转储数据库 3 开放端口 4 打包maven项目 1 宝塔硬件方面 首先在宝塔上安装完成mysql与Tomcat 然后在MySQL的配置文件中添加 skip grant tables 重载配置并启动 注意可能会启
  • tomcat下CSS失效

    项目改界面的时候 把新界面套用到原有页面上去 总是不正常 有部分CSS显示不出来 弄了半天才发现 原来是tomcat缓存的问题 把tomcat的缓存 也就是work文件夹下的相关文件删除就正常了 具体原因好像是因为 tomcat的jsp文件
  • 16.BIO、NIO、AIO 有什么区别?

    简单介绍 BIO 就是传统的 java io包 它是基于流模型实现的 交互的方式是同步 阻塞方式 也就是说在读入输入流或者输出流时 在读写动作完成之前 线程会一直阻塞在那里 它们之间的调用时可靠的线性顺序 它的优点就是代码比较简单 直观 缺
  • Python分析

    一 前言 大家好 首先说明的是 这是一篇技术文 也是一篇not技术文 今天分享的是 当我获取了微信小程序英文取名的3500多个微信用户昵称 年龄段后 分析得到下面解果 二 Let s get it 1 基本信息获取 1 访问英文取名的用户基
  • 可视化修改SQL服务器名字,修改sql server服务器名称

    SQLServer复制需要有实际的服务器名称才能连接到 修改完后 重启SQL SERVER服务 第二种情况下 为远程服务器增加 别名 使用别名代替IP地址来连接远程数据库服务器 我自己用的是SQL SERVER2012 打开SQL SERV
  • selenium⼊⻔到放弃-------->学会了就是玩,能玩出花来

    目录 爬虫和反爬虫之间的斗争 爬虫的建议 动态HTML技术了解 获取ajax数据的方式 selenium chromedriver获取动态数据 selenium 下载chromedriver 安装Seleniumselenium入门 Chr
  • vue3 子组件向父组件传递数据,函数

    父组件向子组件传递参数请看 父组件vue3 setup 父组件向子组件传递参数 子组件 defineExpose 暴露uid name参数和sonToFather的方发 在setup语法糖里面defineExpose不用import引入直接
  • SummaryWriter的使用

    from torch utils tensorboard import SummaryWriter import numpy as np from PIL import Image writer SummaryWriter logs ima
  • el表达式和jstl标签库

    el表达式 只用于jsp页面中 el表达式的最初提出来的时候的作用 1 可以从域对象中获取数据 比较简单 获取域对象内容的表达式 pageContext request session application 2 第二种用法 在el表达式中