深入浅出剖析EL表达式和JSTL

news2024/12/26 21:08:06

el表达式

产生背景

  • 从JSP2.0开始,就不推荐使用java脚本,而是使用el表达式或者动态标签代替 java脚本; 页面标签;

概念和原理

  • 概念:Expression Language :jsp内置的一种表达式语言;
  • 原理:el表达式的出现目的是替换jsp中的java的脚本中的<%=%>
  • 并且内部进行了null值判断,如果为null则不会输出 ,不为null输出对应数据

写法规范

1)点操作符

EL表达式通常有两部分组成:对象和属性。就像Java代码中一样,在EL表达式中也可以用点操作符" . "来访问对象。例如,通过${Dog.name}可以访问Dog对象中的name属性(直接 .name就可以,不用setter或者getter啥的)。而且可以一直往后去 . 有多少点多少。

2) [ ] 操作符

与点操作符类似,“[ ]“操作符也可以访问对象的某个属性,如${Dog[“name”]}可以直接访问狗的名字属性。但是,除此之外,”[ ]” 操作符还提供更加强大的功能。

>当属性名中如果包含了特殊字符如" . “或” -“等的情况下,就不能使用点操作符来访问,这时只能使用”[ ]"操作符。

>访问数组,如果有一个对象名为array的数组,那么可以根据索引值来访问其中的元素,如 a r r a y [ 0 ] 、 {array[0]}、 array[0]{array[1]}等。

>"[ ]"操作符中可以使用变量实现动态访问,如${Dog[dogname]},dogname是另一个变量,改变其值可以动态访问Dog的不同属性(有点像多态)

创建Servlet,做数据提交


@WebServlet("/el")
public class ELServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //0.使用el表达式存放单独的值;
        req.getSession().setAttribute("str","单独的变量");

        //1.使用el表达式存放对象;
        //创建一个session对象,用来设置值,作用域整个 会话期间。
        HttpSession session = req.getSession();
        //设置值;参数1:字符串;参数2:object类型值;
        TUser user=new TUser(1,"admin","123456",22);
        //user存到变量:user里面;
        session.setAttribute("user",user);
        //转发一下到el.jsp页面;
        //2.list集合;项目中list多,比set多;      cate:类别;
        //String[]arr={"","","",""} ,再设置值,一会儿练习,自己写;
        List<String> cateList=new ArrayList<>();
        cateList.add("家电");
        cateList.add("鞋子");
        cateList.add("服装");
        cateList.add("食品");
        //设置到session里面;
        session.setAttribute("cateList",cateList);

        //3.HashMap<Key,value>:键值对集合; 商品键值对
        HashMap<String,String>map=new HashMap<>();
        map.put("pname","英伟达AI显卡88990");
        map.put("price","889900");
        map.put("pnum","8");
        //设置到session里面;
        session.setAttribute("map",map);
        //转发;
        //4.对象,list;二者结合起来;
        //list里面存放对象;
        TUser user1=new TUser(2,"tom","666",66);
        TUser user2=new TUser(3,"jack.ma","mayun",22);
        TUser user3=new TUser(4,"pony.ma","ama",18);
        TUser user4=new TUser(6,"yanhong.li","666",45);
        TUser user5=new TUser(8,"sougou.zhang","666",100);
        ArrayList<TUser>userList=new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        userList.add(user4);
        userList.add(user5);
        //设置session,存放泛型集合数据 ;
        session.setAttribute("userList",userList);

        req.getRequestDispatcher("el.jsp").forward(req,resp);
    }
}

el.jsp页面测试之

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>el表达式测试</title>
</head>
<body>
    <%-- 1.使用el读取类的对象;
             将user对象做为了一个整体,输出到页面;
             1.0 之前是单独值的方式,${单独的变量}可以获取单独的变量对应的值;
             1.1 读取对象的值:${对象.属性名}
             1.2 集合/数组: 集合名/数组名[下标]可以访问集合的元素           数组 [家电, 鞋子, 服装, 食品]
             1.3  双列集合(HashMap)             {pnum=8, pname=英伟达AI显卡88990, price=889900}
                    集合名.key
             1.4 泛型集合数据;
                    userList[下标]:获取的泛型集合里面的每个对象;
                    userList[下标].属性名
        --%>
    ${str}
    <hr>读取对象;
    ${user.id}/${user.username}/${user.password}/${user.age} <br>
    ${user[id]}/${user[username]}/${user[password]}/${user[age]}
    <hr>

    ${cateList[0]}/${cateList[1]}/${cateList[2]}/${cateList[3]}
    <hr>
    ${map}<br>
    ${map.pname}/${map.price}/${map.pnum}<br>
    <hr>
    ${userList[0]} <br>
    ${userList[1]}<br>
    ${userList[2]}<br>
    ${userList[3]}<br>
    ${userList[4]} <br>
    <hr>
    <br>
    读取每个对象里面的数据值;
    ${userList[0].id} /${userList[0].username}/${userList[0].password}/${userList[0].age}<br>
    ${userList[1].id}/${userList[1].username}//${userList[1].password}//${userList[1].age}<br>
    ${userList[2]}<br>
    ${userList[3]}<br>
    ${userList[4]} <br>
</body>
</html>

具体效果
在这里插入图片描述

618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,清华 社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多 个 IT 开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!快来京东点击链接 IT BOOK 多得(或扫描京东二维码)查看详情吧!
在这里插入图片描述

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

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

相关文章

这些excel英语翻译方法你会吗?

大家平常的时候应该都会去做Excel表格吧&#xff1f;无论是在读书、上班或者日常&#xff0c;必然都会使用到吧&#xff1f;但是在处理国际业务时&#xff0c;我们要来处理表格就会比较费时一点&#xff0c;因为语言的不同会有一点影响&#xff0c;所以我们可能需要将Excel表格…

第九章节 用Python实现常微分方程初值问题的数值解法

参考书籍&#xff1a;数值分析 第五版 李庆杨 王能超 易大义编 第9章 常微分方程初值问题的数值解法 文章声明&#xff1a;如有发现错误&#xff0c;欢迎批评指正 文章目录 欧拉法后退的欧拉方法梯形方法改进欧拉公式补充龙格—库塔方法线性多步法阿当姆斯显示与隐式公式 9.1引…

cesium学习(entities实体)

什么是entities CesiumJS具有丰富的空间数据API&#xff0c;可分为两类&#xff1a;面向图形开发人员的低级Primitive API&#xff0c;以及用于数据驱动可视化的高级Entity API。 entitiesAPI公开了一组一致设计的高级对象&#xff0c;这些对象将相关的可视化和信息聚合到一个…

(转载)有导师学习神经网络的分类(matlab实现)

有导师学习神经网络以其良好的学习能力广泛应用于各个领域中&#xff0c;其不仅可以解决拟合回归问题&#xff0c;亦可以用于模式识别、分类识别。将继续介绍两种典型的有导师学习神经网络(GRNN和PNN),并以实例说明其在分类识别中的应用。 1 理论基础 1.1 广义回归神经网络(…

小雉系统U盘安装包制作

​ 本文原地址: http://www.feitianzhi.com/boke/index.php/archives/57/ 概述 小雉系统可从线上系统制作安装包到U盘&#xff0c;制作的安装包可用于新系统的安装&#xff1b; 小雉系统只提供升级包&#xff0c;对应的安装包均是客户在应用升级包后按本文或http://www.f…

为什么AirtestIDE的selenium Window突然无法检索控件了?

1. 前言 最近有很多朋友跟我们反馈&#xff0c;为什么1.2.15版本的IDE没办法做网页元素检索了&#xff0c;是不是我们不支持selenium了之类的。 测试后发现&#xff0c;目前版本确实存在这个问题&#xff0c;原因是Chrome113.0.5672.127(最新)版本过高&#xff0c;AirtestIDE…

ansible 的学习

目录 ansible学习思路&#xff1a; ansible是什么&#xff1f; 官网&#xff1a;Ansible is Simple IT Automation ansible的组成&#xff1a; 参考文档&#xff1a;Ansible入门与playbook实战-~学无止境,学以致用 ^ _ ^-51CTO博客 ansible操作体验&#xff1a; 1、先…

机器学习算法(一)KNN近邻算法

一、KNN算法概述 KNN&#xff1a;K-Nearest-Neighbor算法&#xff0c;即K值为邻近。KNN是最简单的分类算法之一&#xff0c;同时&#xff0c;也是最常用的分类算法之一。KNN算法是有监督学习中的分类算法。 二、原理 基于基于iris数据集&#xff0c;具体经历下面四步流程&am…

指南 | OpenAI API对PDF进行总结提炼

前言 本文将针对信息过载阅读搜索难的问题&#xff0c;展示如何利用OpenAI API高效地自动总结PDF&#xff0c;从而提高阅读效率和节省时间。包含详尽的操作教程、实际案例及最佳实践&#xff0c;旨在确保准确且高效地进行文档摘要。另外&#xff0c;本文还将深入探讨运用AI技术…

Cocos Creator3D:发布到 Web 平台

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 发布到 Web 平台 打开主菜单的 项目 -> 构建发布&#xff0c;打开构建发布面板。 Cocos Creator 3D 提供了两种 Web 平台的页面模板&#xff0c;可以通过 发布平台 的下拉菜单…

非靶代谢组学+肠道菌群测序:改善乳腺癌相关性疲劳——针灸!

文章标题&#xff1a; Acupuncture ameliorates breast cancer-related fatigue by regulating the gut microbiota-gut-brain axis 发表期刊&#xff1a;Frontiers in Endocrinology 影响因子&#xff1a;6.055 作者单位&#xff1a;河南中医药大学第一附属医院 百趣生物提…

新建项目框架详细过程(idea2021.3版本) IoC实例 DI

目录 使用Java Enterprise 一步到位 IOC、IOC容器、Bean、DI 1.IOC&#xff08;Inversion of Control&#xff09;控制反转 (1)什么是控制反转呢&#xff1f; (2)Spring和IOC之间的关系是什么呢? (3)IOC容器的作用以及内部存放的是什么? (4)当IOC容器中创建好service和…

【半监督图像分割 2023 CVPR】UniMatch

【半监督图像分割 2023 CVPR】UniMatch 论文题目&#xff1a;Revisiting Weak-to-Strong Consistency in Semi-Supervised Semantic Segmentation 中文题目&#xff1a;重新审视半监督语义分割中的强弱一致性 论文链接&#xff1a;https://arxiv.org/abs/2208.09910 论文代码&a…

ES6 JavaSript

爬虫组件分析 目录概述需求&#xff1a; 设计思路实现思路分析1.最常用的ES6特性2.let, const3.class, extends, super4.arrow function5.template string 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&a…

MTK平台的SWT异常的简单总结(3)——常见SWT/ANR类型

&#xff08;1&#xff09;如何查看db文件Log &#xff08;2&#xff09;如何确认线程关系 &#xff08;3&#xff09;常见类型 &#xff08;A&#xff09;等锁 线程状态为"Blocked"&#xff0c;通过关键字"held by"进一步确认哪个线程拿住了锁&#xff…

一.《传奇M》装备栏遍历的突破口

寻找突破口 1.首先根据大多数游戏而言,装备栏中一般记录的是装备的对象或者装备ID,那么当我们穿装备或者脱装备肯定会有相应的值在改变 2.我们就从这里入手,当穿或脱装备的时候,使用CE搜索0然后通过改变或者未改变来筛选结果 3.接下来我们操作试一试这个思路可不可以 4.点击首…

Vue中如何进行图片识别与物体检测

Vue中如何进行图片识别与物体检测 随着人工智能技术的发展&#xff0c;图像识别和物体检测已经成为了很多应用场景的必备功能。在Vue中如何使用百度AI或腾讯AI等云服务实现图片识别和物体检测呢&#xff1f;本文将为您介绍一些基本概念和示例代码&#xff0c;帮助您快速入门。…

强化学习PPO:Proximal Policy Optimization Algorithms解读

PPO算法是一类Policy Gradient强化学习方法&#xff0c;经典的Policy Gradient通过一个参数化决策模型来根据状态确定动作&#xff0c;其参数更新是通过下式进行的&#xff1a; 用于衡量决策模型的优劣目标&#xff0c;决策模型的优化目标为寻找最优决策&#xff0c;使得该决策…

电力辅助服务

电力辅助服务 1、电力辅助服务是什么2、电力辅助服务发展历程3、《电力辅助管理办法》主要修订内容4、电力辅助服务品种5、电力辅助服务市场规模6、国外电力辅助服务市场 1、电力辅助服务是什么 《电力辅助服务管理办法》中定义电力辅助服务是由火电、水电、核电、风电、光伏发…

Elastic 推出 Elastic AI 助手

作者&#xff1a;Mike Nichols Elastic 推出了 Elastic AI Assistant&#xff0c;这是一款由 ESRE 提供支持的开放式、生成式 AI 助手&#xff0c;旨在使网络安全民主化并支持各种技能水平的用户。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 提供了用于创建高度相…