04、EL和JSTL核心技术

目录

1 EL表达式(熟悉)

1.1 基本概念

1.2 主要功能 

1.3 访问内置对象的数据 

1.3.1访问方式

1.3.2 执行流程 

1.4 访问请求参数的数据 

1.5 访问Bean对象的属性 

 1.5.1 访问方式

1.5.2 主要区别 

1.6 访问集合中的数据 

1.7 常用的内置对象 

1.8 常用的运算符

1.8.1 常用的算术运算符

1.8.2 常用的关系运算符 

1.8.3 常用的逻辑运算符

 1.8.4 条件运算符

 1.8.5 验证运算符

2 JSTL标签(熟悉) 

 2.1 基本概念

 2.3 常用核心标签

 2.3.1 输出标签

 2.3.2 设置标签

 2.3.3 删除标签

 2.3.4 单条件判断标签

 2.3.5 多条件判断标签

 2.3.6 循环标签

 2.4 常用函数标签

 2.5 常用格式化标签

 2.6 自定义标签 


1 EL表达式(熟悉)

1.1 基本概念

  • EL(Expression Language)表达式提供了在JSP中简化表达式的方法,可以方便地访问各种数据并输出。

1.2 主要功能 

  • 依次访问pageContext、request、session和application作用域对象存储的数据。
  • 获取请求参数值。
  • 访问Bean对象的属性。
  • 访问集合中的数据。
  • 输出简单的运算结果。

1.3 访问内置对象的数据 

1.3.1访问方式

<%=request.getAttribute(“ varName”)%>
用EL实现: ${ varName }

1.3.2 执行流程 

1.4 访问请求参数的数据 

  •  在EL之前使用下列方式访问请求参数的数据
request.getParameter(name);
request.getParameterValues(name);
  • 在EL中使用下列方式访问请求参数的数据 
    param:接收的参数只有一个值。
    paramValues:接受的参数有多个值。
<!-- 获取指定参数的数值 --> 
${param.name} 
<!-- 获取指定参数中指定下标的数值 --> 
${paramValues.hobby[0]}

1.5 访问Bean对象的属性 

 1.5.1 访问方式

  • 方式一: $ { 对象名 . 属性名 },例如:${user.name}
  • 方式二: $ { 对象名 [“属性名”] },例如:${user[“name”]}

1.5.2 主要区别 

  • 当要存取的属性名中包含一些特殊字符,如: . 或 ,等并非字母或数字的符号,就一定要使用 [ ]而不是.的方式

  • 使用[]的方式可以动态取值,具体方式如下:

    <% request.setAttribute(“prop”,“age”); %>
    <!-- 相当于表达式中写一个变量 --> 
    ${ user[prop] }
    

1.6 访问集合中的数据 

<!-- student为ArrayList类型的对象 --> 
${student[0].name}

1.7 常用的内置对象 

类别标识符描述
JSPpageContextPageContext 处理当前页面
作用域pageScope同页面作用域属性名称和值有关的Map类
requestScope同请求作用域属性的名称和值有关的Map类
sessionScope同会话作用域属性的名称和值有关的Map类
applicationScope同应用程序作用域属性的名称和值有关的Map类
请求参数param根据名称存储请求参数的值的Map类
paramValues把请求参数的所有值作为一个String数组来存储的Map类
请求头header根据名称存储请求头主要值的Map类
headerValues把请求头的所有值作为一个String数组来存储的Map类
Cookiecookie根据名称存储请求附带的cookie的Map类
初始化参数initParam根据名称存储Web应用程序上下文初始化参数的Map类

1.8 常用的运算符

1.8.1 常用的算术运算符

算术运算符说 明范 例运算结果
+${1+2}3
-${2-1}1
*${2*3}6
/或div${16/5}或${16div5}3.2
% 或 mod取余${16%5}或${16mod5}1

1.8.2 常用的关系运算符 

关系运算符说 明范 例运算结果
==或eq等于${1==2}或${1 eq 2}false
!= 或ne不等于${2!=1}或${1 ne 2}true
< 或lt小于${2<3}或${2 lt 3 }true
> 或 gt大于${16>5}或${16 gt 5}true
<= 或 le小于等于${16<=5}或${16 le 5}false
>= 或 ge大于等于${16>=5}或${16 ge 5}true

1.8.3 常用的逻辑运算符

逻辑运算符说 明范 例运算结果
&& 或 and与运算${true&&true}或${true and true}true
|| 或or或运算${true||false}或${true or false}true
! 或not非运算${!true}或${not true }false

 1.8.4 条件运算符

${条件表达式? 语句1 : 语句2}

 1.8.5 验证运算符

${empty 表达式}  返回布尔值
判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值。

2 JSTL标签(熟悉) 

 2.1 基本概念

  • 下载JSTL的jar包并添加到项目中,下载地址为:https://tomcat.apache.org/download-taglibs.cgi
  • 在JSP页面中使用taglib指定引入jstl标签库,方式为:
<!-- prefix属性用于指定库前缀 --> 
<!-- uri属性用于指定库的标识 --> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 2.3 常用核心标签

 2.3.1 输出标签

<c:out></c:out> 用来将指定内容输出的标签

 2.3.2 设置标签

<c:set></c:set> 用来设置属性范围值的标签

 2.3.3 删除标签

<c:remove></c:remove> 用来删除指定数据的标签

 2.3.4 单条件判断标签

<c:if test =“EL条件表达式”> 满足条件执行 
</c:if >

 2.3.5 多条件判断标签

<c:choose > <c:when test =“EL表达式”> 满足条件执行 </c:when> …<c:otherwise> 不满足上述when条件时执行 </c:otherwise> 
</c:choose >

 2.3.6 循环标签

<c:forEach var=“循环变量” items=“集合”> … 
</c:forEach>

 2.4 常用函数标签

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

 2.5 常用格式化标签

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

 2.6 自定义标签 

  • 如果上面几个标签不能满足需求,程序员也可以自定义标签,步骤如下:
  • 编写标签类继承SimpleTagSupport类或TagSupport类并重写doTag方法或doStartTag方法。
public class TagTest extends SimpleTagSupport { private String name; public String getName() { return name; }public void setName(String name) { this.name = name; }@Override public void doTag() throws JspException, IOException { JspWriter out = this.getJspContext().getOut(); out.println("自定义标签的参数为:" + name); } 
}
  • 定义标签库文件(tld标签库文件)并配置标签说明文件到到WEB-INF下:
<tag><name>helloTag</name> <tag-class>com.yy.demo01.TagTest</tag-class> <body-content>empty</body-content> <attribute> <name>name</name> <required>true</required> </attribute> 
</tag>
  •  在JSP中添加taglib指令引入标签库使用:
<%@ taglib prefix="hello" uri="http://hyq.com" %>

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

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

相关文章

uboot启动流程-涉及lowlevel_init汇编函数

一. uboot启动流程涉及函数 之前文章简单分析了 uboot启动流程的开始&#xff0c;从链接脚本文件 u-boot.lds 中&#xff0c;我们已经知道了入口点是 arch/arm/lib/vectors.S 文件中的 _start函数。 _start函数&#xff1a;调用了 reset 函数&#xff0c;reset 函数内部&…

1、Kafka 安装与简单使用

第 1 章 Kafka 概述 1.1 定义 Kafka传统定义&#xff1a; Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 Kafka最新定义 &#xff1a; Kafka是 一个开源的 分 布式事件流平台 &#xff08…

《CTFshow-Web入门》10. Web 91~110

Web 入门 索引web91题解总结 web92题解总结 web93题解 web94题解 web95题解 web96题解 web97题解 web98题解 web99题解总结 web100题解 web101题解 web102题解 web103题解 web104题解 web105题解总结 web106题解 web107题解 web108题解 web109题解 web110题解 ctf - web入门 索…

Scala第十四章节

Scala第十四章节 1. 隐式转换和隐式参数介绍 2. 隐式转换 3. 隐式参数 4. 案例: 获取列表元素平均值 scala总目录 文档资料下载

大数据Flink(九十):Lookup Join(维表 Join)

文章目录 Lookup Join(维表 Join) Lookup Join(维表 Join) Lookup Join 定义(支持 Batch\Streaming):Lookup Join 其实就是维表 Join,比如拿离线数仓来说,常常会有用户画像,设备画像等数据,而对应到实时数仓场景中,这种实时获取外部缓存的 Join 就叫做维表 Join。…

10.1 今日任务:select实现服务器并发

#include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.112.115" //本机IP&#xff0c;ifco…

Qt自定义菜单

Qt开发过程中&#xff0c;弹出菜单时我们一般使用QMenu,但是QMenu都是一条项固定的格式&#xff0c;如查想要自己的设计界面就没法使用默认的Action项了&#xff0c;因此我们得用自定义的QMenu。 本篇介绍使用自定义的QMenu设计出UI。我们使用QWidget QWidgetAction来实现。Q…

Spring注册Bean系列--方法1:@Component

原文网址&#xff1a;Spring注册Bean系列--方法1&#xff1a;Component_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法&#xff1a;Component。 注册Bean的方法我写了一个系列&#xff0c;见&#xff1a;Spring注册Bean(提供Bean)系列--方法大全_IT利刃出鞘…

前期开发用最内聚环境,最直观简单的方法管理代码

代码稍微一多我们就会思考代码如何去规划和管理&#xff0c;首先想到MVN等管理工具去帮助我们&#xff0c;结果配置了好长时间感觉不是很方便。首先因为没有系统去了解这个工具的使用方法&#xff0c;另外发现IDEA在原本松散的工具之间以插件的形式做了一定的配置&#xff0c;将…

数据分析三剑客之一:Numpy详解及实战

1 NumPy介绍 NumPy 软件包是Python生态系统中数据分析、机器学习和科学计算的主力军。它极大地简化了向量和矩阵的操作处理。Python的一些主要软件包&#xff08;如 scikit-learn、SciPy、pandas 和 tensorflow&#xff09;都以 NumPy 作为其架构的基础部分。除了能对数值数据…

基于Java的城市天然气费管理系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

QT:鼠标画线(双画布)

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPoint> //点 #include <QMouseEvent> //鼠标事件 #include <QPaintEvent> //绘图事件class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent 0);~Wi…

大模型 Decoder 的生成策略

本文将介绍以下内容&#xff1a; IntroductionGreedy Searchbeam searchSamplingTop-K SamplingTop-p (nucleus) sampling总结 一、Introduction 1、简介 近年来&#xff0c;由于在数百万个网页数据上训练的大型基于 Transformer 的语言模型的兴起&#xff0c;开放式语言生…

[题]修剪草坪 #单调队列优化

题目 洛谷上的题目 Acwing上的题目 根据y总的一波分析&#xff0c;我们得出……公式就是一切…… 所以&#xff0c;我要学会推公式…… 推公式…… 公式…… #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 1e5 10; int n, m; ll s[N…

Matlab随机数的产生

目录 1、常见分布随机数的产生 1.1 二项分布 1.2 泊松分布 1.3 几何分布 1.4 均匀分布&#xff08;离散&#xff0c;等可能分布&#xff09; 1.5 均匀分布&#xff08;连续型等可能&#xff09; 1.6 指数分布&#xff08;描述“寿命”问题&#xff09; 1.7 正态分布 1.8…

支持向量机SVM:从数学原理到实际应用

目录 一、引言背景SVM算法的重要性 二、SVM基础线性分类器简介什么是支持向量&#xff1f;超平面和决策边界SVM的目标函数 三、数学背景和优化拉格朗日乘子法&#xff08;Lagrange Multipliers&#xff09;KKT条件核技巧&#xff08;Kernel Trick&#xff09;双重问题和主问题&…

[JAVAee]MyBatis

目录 MyBatis简介 MyBatis的准备工作 框架的添加 连接数据库字符串的配置 MyBatis中XML路径的配置 ​编辑 MyBatis的使用 各层的实现 进行数据库操作 增加操作 拓展 修改操作 删除操作 查询操作 结果映射 单表查询 多表查询 like模糊查询 动态SQL / MyBa…

传输层协议—UDP协议

传输层协议—UDP协议 文章目录 传输层协议—UDP协议传输层再谈端口号端口号范围划分pidofnetstat UDP协议端格式UDP报文UDP特点UDP缓冲区基于UDP的应用层协议 传输层 在学习HTTP/HTTPS等应用层协议时&#xff0c;为了方便理解&#xff0c;可以简单认为HTTP将请求和响应直接发送…

【算法优选】双指针专题——贰

文章目录 &#x1f60e;前言&#x1f332;[快乐数](https://leetcode.cn/problems/happy-number/)&#x1f6a9;题目描述&#x1f6a9;题⽬分析&#xff1a;&#x1f6a9;算法思路&#xff1a;&#x1f6a9;代码实现&#xff1a; &#x1f38b;[盛水最多的容器](https://leetco…

CocosCreator3.8研究笔记(二十二)CocosCreator 动画系统-动画剪辑和动画组件介绍

国庆假期&#xff0c;闲着没事&#xff0c;在家研究技术~ 大家都知道在Cocos Creator3.x 的版本的动画编辑器中&#xff0c;可以实现不用写一行代码就能实现各种动态效果。 Cocos Creator动画编辑器中主要实现关键帧动画&#xff0c;不仅支持位移、旋转、缩放、帧动画&#xff…