JSTL和EL:

2023-11-20

El表达式使JSP的开发变得更加简单

简介:

什么是EL:

        Expression Language(表达式语言)

El得功能:

        代替JSP页面中数据访问时得代码复杂编程

EL得特点:

        自动转换类型:

                EL得到某个数据时可以自动转换类型

        使用简单

EL表达式得语法:

${EL expression}

        通过变量名取值

        获取对象得属性

        获取集合元素

        执行表达式

 001:通过变量名取值

                ${变量名}:

                        如:代码:

按照page--》request--》session--》application的作用域顺序依次查找,找到返回,找不到返回null。

        //准备值(在Servlet中)
        request.setAttribute("user",user);
        //在JSP中访问数据
        姓名:${user]     ----》${requestScope.user}

 指定作用域:

属性范围 EL中的名称
page pageScope,例如${pageScope.username}表示在page作用域查找变量username,找不到返回null
request requestScope
session sessionScope
application applicationScope

002:获取对象的属性:

        

<%-- //使用EL(操作符)展示集合--%>
 <h1> 使用.展示集合</h1>
 用户名:${user.userName}
  密码:${user.password}

  <%-- //使用[ ]展示集合--%>
  <h1> 使用[ ]展示集合</h1>
  用户名:${user["userName"]}
  密码:${user["password"]}

EL表达式语法:

 EL隐试对象

 JSTL通用标签:

使用EL表达式可以简化JSP页面编码,但是如果需要进行逻辑判断和循环控制怎么办?

El表达式封装了数据访问功能,而JSTL标签库则封装了逻辑控制,循环控制以及数据格式化功能,二者结合使用才可以完整的实现动态页面开发需求。

什么是JSTL:

        jsp标准标签库(JSP Standard Tag Library)

JSTL优点:

  1. 提供一组标准标签
  2. 可用于编写各种动态功能

使用步骤:

        引入JSTL的jar文件和标签库描述符文件

        在JSRTL页面添加taglib指令

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

          使用JSTL标签

 JSTL标准标签库介绍: 

 set:设置指定范围内的变量值

        将value值存储到范围为scope的变量variable中

语法:<c:set var="variable" value="value“ scope=”scope“/>

                var:变量名称

                value:变量的值

                scope:变量的作用域

          将value值设置到对象的属性中

语法:<c:set target=”target“ property=”property“ value=”calue“/>

                target:设置变量的每一个值。

                property:=设置变量中的哪一个属性。

                value:属性具体的值。

 //在servlet或者jsp中设置javaBean
        User user=new User();
        request.setAttribute("user",user);
        //在JSP中修改javaBean的属性值
        <c:set target="${user} "property="name" value="defautName"></c:set>

      

out:计算表达式并将结果输出显示

        不指定默认值

<c: out value="value"/>

        指定默认值

<c:out value ="value" defaulrt="default"/>

 //在servlet或者jsp中设置javaBean
        User user=new User();
        request.setAttribute("user",user);
        //在JSP中修改javaBean的属性值
        <c:out value="${user.name} " default="NO username"/>

转义特殊字符:

out 后加上 (escapeXml=”false“)就不会被转义: 

<p>${"<a href='http://www.baidu.com'>百度</a>"}</p>    //页面显示百度
<p>页面显示
    <c:out escapeXml="false" value="<a>'http://www.baidu.com'>百度</a>"/>   //页面显示百度
</p>
<c:out value=""<a>'http://www.baidu.com'>百度</a>"/>   //页面显示<a>'http://www.baidu.com'>百度</a>

remove:删除指定范围内的变量

        <c:remove var="variable" scope="scope"/>

                var:变量名称。

                scope:作用域。

<p>msg=<c:out value="${msg}" default="null"></c:out> </p>
<p><c:set var="msg" value="hello remove" scope="page"></c:set> </p>
<p>msg=<c:out value="${msg}" default="null"></c:out> </p>
<p><c:remove var="${msg}" scope="page"></c:remove> </p>
<p>msg=<c:out value="${msg}" default="null"></c:out> </p>

JSTL之条件查询:

if:实现java语言中if语句的功能

        语法:<c:if test="condition" var ="variable" scope="scope"> ...  </c:if>

                        test="condition"::判断条件表达式返回true/false

                        var ="variable"::该变量用于保存返回值true/false

                        scope="scope"::指定var变量的作用域

        <c:if test="判断条件"></c:if>

choose:实现if-else if-else语句功能

                语法:

                        <c:choose>

                                <c:when test="condition1">

                                        内容一

                                </c:when>

                                <c:when test="condition2">

                                        内容二

                                </c:when>

                        </c:choose>

                                .............

                          <c:otherwise>

                                        内容n

                          </c:otherwise>

          </c:choose>

JSTL迭代标签

forEach:实现对集合对象的遍历

<c:forEach items="collection" var="varName" begin=”start“ end=”end“  step=”stepSize“ varStatus=”status“>

        ........循环迭代代码

</c:forEcah>

                 items="collection"::iteams指定要遍历的集合对象

                 var="varName"::var指定当前成员的引用

                 begin=”start“::begin指定从集合的第几位开始

                end=”end“::end指定迭代到集合的第几位结束

                 step=”stepSize“::step指定循环的步长

                varStatus=”status“”::varStatus属性用于存放var引用的成员相关信息,如索引

代码演示:

<tr>
    <td>名字</td>
    <td>球号</td>
    <td>操作</td>
</tr>
<c:forEach items="${users}" var="u">
    <tr>
        <td>${u.userName}</td>
        <td>${u.password}</td>
        <td><a href="#">修改</a></td>
    </tr>

</c:forEach>

                

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

JSTL和EL: 的相关文章

随机推荐

  • 并发编程系列之自定义线程池

    前言 前面我们在讲并发工具类的时候 多次提到线程池 今天我们就来走进线程池的旅地 首先我们先不讲线程池框架Executors 我们今天先来介绍如何自己定义一个线程池 是不是已经迫不及待了 那么就让我们开启今天的旅途吧 什么是线程池 线程池可
  • selenium+python 对输入框的输入处理

    最近自己在做项目的自动化测试 公司无此要求 在用户管理模块做修改用户信息时 脚本已经跑成功 并且的确做了update操作 但是自己登陆页面检查 信息却没有被修改 再次确定系统该模块的编辑功能可用 脚本如下 if result num gt
  • 近千万EOS被盗事件回顾,大家请保护好自己的EOS私钥

    最近有伙伴被盗了价值近千万的EOS 于是查看了这次被盗活动账号记录 这次分享出来 一是有可能大家有线索 二是也让大家意识到数字货币私钥安全的重要性 事件回顾 受害人在7 9号被偷盗人通过update auth更换了账号授权公私钥 紧接着被转
  • 零基础到GPT高手:快速学习与利用ChatGPT的完全指南

    进入人工智能时代 令人惊叹的ChatGPT技术正在引爆全球 您是否想象过能够与智能语言模型对话 提升工作效率 解锁创意 甚至实现商业化变现 在本篇文章中 我将向你揭示ChatGPT的原理 学习技巧 并展示如何利用ChatGPT提升工作效率和
  • Windows11:QT5.14.2+PCL1.12.0+VS2019环境配置

    之前在win10系统下配置了PCL1 8 1 QT5 9 1 VS2015的开发环境 由于PCL库已经更新到了1 12 1而且1 8 1一直有bug 为了使用下新的算法库 今天配置一下新的开发环境 1 安装Qt5 14 2 Qt5 14 2
  • 【b站雅思笔记】Simon‘s IELTS Course - 听力部分

    前情提要 b站up主贼开心的小林上传的Simon的听力课 资料均来源于她 参考 雅思阅读 最好的雅思课程 阅读部分全集 https www bilibili com video BV1ea4y1x7qR spm id from 333 78
  • Spring为什么要用的三级缓存解决循环依赖

    一 代码准备 Component aService public class AService Autowired private BService bService public void test System out println
  • 哈工大2020软件构造Lab3实验报告

    本项目于4 21日实验课验收 更新完成 如果有所参考 请点点关注 点点赞GitHub Follow一下谢谢 2020春计算机学院 软件构造 课程Lab3实验报告 Software Construction 2020 Spring Lab 3
  • react_hooks系列05_useRef,useImperativeHandle,高阶组件forwordRef

    一 useRef 1 uesRef使用在官方标签上 useRef 返回一个可变的 ref 对象 其 ref 对象 current 属性被初始化为传入的参数 initialValue 返回的 ref 对象在组件的整个生命周期内保持不变 imp
  • 蓝桥杯字母阵列

    字母阵列 递归解法 仔细寻找 会发现 在下面的8x8的方阵中 隐藏着字母序列 LANQIAO SLANQIAO ZOEXCCGB MOAYWKHI BCCIPLJQ SLANQIAO RSFWFNYA XIFZVWAL COAIQNAL 我
  • 教你怎么导入导出数据

    最近在做一个项目 需要对数据进行导入导出 实现之后 自己也做了一个总结 总体来说还是比较容易的 第一次的话肯定有许多坑的 细节真的很重要 当你踏过一个又一个坑 一路路走来 你会发现自己的信心越来越强 对于数据的导入导出 我们首先写一个工具类
  • 代码检查、评审、单元测试工具 大搜集

    看书真是迅速进入一个陌生领域的最快办法 系统的 体系完整的知识比起在互联网上七拼八凑出的认识强太多了 先记下一些理论概念 软件生命周期模型 分析 设计与文档 编码与审查 测试与调试 发布与维护 软件测试对象的6种分类 单元测试 静态检查 动
  • 数据结构---线性表的静态/动态分配与顺序/链式存储

    线性表 基于严魏敏版数据结构c语言实现 谭浩强版c语言 数据元素在计算机中的存储分为顺序存储和链式存储 顺序存储 借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系 链式存储 借助指示元素存储地址的指针表示数据元素之间的逻辑关系 ps
  • matlab定义机器人位置,机器人自定位问题(数学建模)

    形形色色 各式各样的机器人正在走进人们的生产与生活 发挥着越来越重要的作用 这些机器人 一般都拥有 感官 各种传感器 大脑 智能计算的软硬件 和 执行器 各种操控设备 等 它们在自己的工作场合内 能自主感知 自主决策并完成使命 为达到这样的
  • 笔记---Linux安装OpenCV及VSCode的配置编译

    学更好的别人 做更好的自己 微卡智享 本文长度为4250字 预计阅读10分钟 前言 最近在学点新东西 教程中主要也是在Linux中使用 对于我这个以前从未接触Linux系统的人来说 正好也是个机会掌握下LInux系统 这篇就是记录在Linu
  • 批量创建文件与文件夹

    1 批量创建文件 下面们来说一下如何在pyhton中去批量创建文件 假设我要新建10个txt文件 这里我用一个for循环 for i in range 10 这里的 指代的是当前文件夹 i表示文件的名称 a表示没有该文件就新建 f open
  • Java 泛型 T,E,K,V,?

    泛型带来的好处 在没有泛型的情况的下 通过对类型 Object 的引用来实现参数的 任意化 任意化 带来的缺点是要做显式的强制类型转换 而这种转换是要求开发者对实际参数类型可以预知的情况下进行的 对于强制类型转换错误的情况 编译器可能不提示
  • 入门力扣自学笔记279 C++ (题目编号:1123)

    1123 最深叶节点的最近公共祖先 题目 给你一个有根节点 root 的二叉树 返回它 最深的叶节点的最近公共祖先 回想一下 叶节点 是二叉树中没有子节点的节点 树的根节点的 深度 为 0 如果某一节点的深度为 d 那它的子节点的深度就是
  • python 实现 softmax分类器(MNIST数据集)

    最近一直在外面 李航那本书没带在身上 所以那本书的算法实现估计要拖后了 这几天在看Andrew Ng 机器学习的课程视频 正好看到了Softmax分类器那块 发现自己之前理解perceptron与logistic regression是有问
  • JSTL和EL:

    El表达式使JSP的开发变得更加简单 简介 什么是EL Expression Language 表达式语言 El得功能 代替JSP页面中数据访问时得代码复杂编程 EL得特点 自动转换类型 EL得到某个数据时可以自动转换类型 使用简单 EL表