JavaWeb笔记整理+图解——服务器渲染技术之EL表达式与JSTL

上一篇我们讲解了什么是服务器渲染技术和jsp,今天我来整理一下EL表达式和JSTL的笔记与图解,让我们的jsp页面更加的简洁与可维护。

没看过上一期的小伙伴可以看上一期的笔记:

JavaWeb笔记全整理——JSP服务器渲染技术-CSDN博客

一、EL表达式

1、EL表达式快速入门

EL表达式(Expression language),是种表达式语言。它是为了代替jsp中的<%=%>表达式脚本而出现的。

它使用 ${表达式} 来表示一个参数,或表达式。

jsp的表达式
EL表达式

看起来这两个式子区别并不大呀,为什么EL表达式可以取代jsp的表达式脚本呢? 

别急,后面你就知道它的大用处。

现在我们设置一个参数:

显示结果:

可以看到,我们如果想要在jsp页面上打印出来这个值,那么我们就需要调用request.getAttribute方法,这样的代码是有些繁琐的。

现在我们改用EL表达式:

显示结果:

 可以看到,两个表达式的显示是一模一样的,但是EL表达式显然更简洁一些。因为在EL表达式中可以识别到request中设置的参数——key,所以我们直接在EL表达式中填入key即可,而不需要再调用request.getAttribute()方法,所以代码就简单了许多。

 还有一点,如果jsp表达式脚本中获取的Attribute值不存在,那么会输出null字符串,而EL表达式则不会输出任何东西(即输出一个 “” 空字符串):

EL表达式输出类信息和集合信息

下面我演示EL表达式的其他输出方式。首先定义Student类和集合用于演示:

import java.util.List;public class Student {private String name;private int age;private List<Course> courses;public Student(String name, int age, List<Course> courses) {this.name = name;this.age = age;this.courses = courses;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public List<Course> getCourses() {return courses;}public void setCourses(List<Course> courses) {this.courses = courses;}
}

Course课程类:

public class Course {private String title;private String instructor;public Course(String title, String instructor) {this.title = title;this.instructor = instructor;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getInstructor() {return instructor;}public void setInstructor(String instructor) {this.instructor = instructor;}
}

我们在jsp页面中创建一些对象,一边后续的输出:

 这里如果我们没有设置Attribute的值,而是想使用EL表达式直接输出,那么是不可行的:

结果: 

并没有显示Student的信息,所以我们需要调用setAttribute方法先设置一下,才能使用EL表达式来输出:

输出结果:

 我们也可以将属性一个一个的输出:

显示结果:

2、EL运算操作 

EL表达式中还可以填入运算式子,运算符和Java一致:

EL表达式的empty运算

EL表达式使用empty运算来判断一个值是否为空或0值,以下情况都会返回true

3、EL表达式的隐含对象

我们可以通过以下四个对象来获取jsp页面的域对象的值:

演示一下:注意要写一个字符串 

而pageScope中有许多方法,列在下面有个印象即可:

通过 request 对象来获取和 HTTP 协议相关的数据

request.getScheme() 它可以获取请求的协议

request.getServerName() 获取请求的服务器 ip 或域名

request.getServerPort() 获取请求的服务器端口号

getContextPath() 获取当前工程路径

request.getMethod() 获取请求的方式(GET 或 POST)

request.getRemoteHost() 获取客户端的 ip 地址

session.getId() 获取会话的唯一标识

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>pageContext 对象的使用</title>
</head>
<body>
<h1>pageContext 对象的使用</h1>
<%--
//通过 request 对象来获取和 HTTP 协议相关的数据
request.getScheme() 它可以获取请求的协议
request.getServerName() 获取请求的服务器 ip 或域名
request.getServerPort() 获取请求的服务器端口号
getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式(GET 或 POST)
request.getRemoteHost() 获取客户端的 ip 地址
session.getId() 获取会话的唯一标识
--%>
<hr/>
协议: ${ pageContext.request.scheme }<br>
服务器 ip:${ pageContext.request.serverName }<br>
服务器端口:${ pageContext.request.serverPort }<br>
工程路径:${ pageContext.request.contextPath }<br>
请求方法:${ pageContext.request.method }<br>
客户端 ip 地址:${ pageContext.request.remoteHost }<br>
会话 id :${ pageContext.session.id }<br>
<h1>使用 jsp 表达式脚本获取如上信息</h1>
ip 地址: <%=request.getRemoteHost() %> <br>
<h1>使用 el 表达式形式获取信息</h1>
<%
pageContext.setAttribute("req", request);
%>
ip 地址: ${req.remoteHost} <br>
获取请求方法: ${req.method} <br>
</body>
</html>

二、JSTL

1、JSTL快速入门

EL表达式是为了替换jsp中的表达式脚本,那么JSTL就是为了替换掉jsp中的代码脚本

JSTL由五个标签库组成:

为了使用jstl我们还需要导入jstl的jar包。

快速入门演示

网页输出:

导入 jstl jar 包后,要重新发布 web 工程,否则不识别!!!会出现500错误代码。

2、jstl核心库

<c:set />标签

这个标签可以设置一些数据相当于setAttribute(key,value);

scope 属性设置保存到哪个域
page 表示 PageContext 域(默认值)
request 表示 Request 域
session 表示 Session 域
application 表示 ServletContext 域

var 属性设置 key 是什么

value 属性设置值

演示一下:

用EL表达式看看是否设置成功:

设置成功:

 

如果想要设置一个数字作为value而不是字符串,那么需要填入一个EL表达式。

<c:if />标签

if 标签用来做 if 判断。

test 属性表示判断的条件(用 EL表达式)

演示 快速入门演示过了:

<c:choose> <c:when> <c:otherwise>标签

多路判断标签,相当于Java中的Switch case

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jstl</title>
</head>
<body>
<h3>jstl演示</h3><%--这里注意,如果想要将value设置为一个数字,则需要使用EL表达式,不能直接使用字符串--%>
<c:set scope="request" var="key" value="${10001}"/><c:choose><c:when test="${requestScope.key > 10000}">工资过万</c:when><c:when test="${requestScope.key > 20000}">工资过两万</c:when><c:otherwise><c:choose><c:when test="${requestScope.key > 30000}">工资过三万</c:when></c:choose></c:otherwise>
</c:choose></body>
</html>

结果:

这里的<c:choose> 相当于Switch语句

<c:when>相当于case 语句 

<c:otherwise>相当于default

<c:foreach>标签

用于遍历输出 i 到 j 、遍历一个数组、遍历一个集合:

<c:forEach items="${ requestScope.sports }" var="item"/>
这里的items相当于Java中的增强for循环中需要遍历取出的集合,而var相当于取出来的其中一个元素。

演示:

<%@ page import="java.util.HashMap" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jstl</title>
</head>
<body>
<h3>jstl演示</h3><%HashMap<String, String> map = new HashMap<>();map.put("红楼梦", "曹雪芹");map.put("西游记", "吴承恩");map.put("水浒传", "施耐庵");map.put("三国演义", "罗贯中");request.setAttribute("books",map);
%>
<c:forEach items="${books}" var="book">${book.key} - ${book.value} <br/>
</c:forEach></body>
</html>

演示结果:

这里有几点需要注意:

在使用foreach标签来遍历的时候,需要先把map放入request中,即,先调用request的setAttribute方法,从而让EL表达式识别,然后再用foreach访问。

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

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

相关文章

Git 小白入门到进阶—(基本概念和常用命令)

一.了解 Git 基本概念和常用命令的作用 (理论) 基本概念 1、工作区 包含.git文件夹的目录&#xff0c;主要用存放开发的代码2、仓库 分为本地仓库和远程仓库&#xff0c;本地仓库是自己电脑上的git仓库(.git文件夹);远程仓库是在远程服务器上的git仓库git文件夹无需我们进行操…

MaxKB,基于 LLM 大语言模型的知识库问答系统,开箱即用,支持快速嵌入到第三方业务系统。

MaxKB 是一款基于 LLM 大语言模型的知识库问答系统。MaxKB Max Knowledge Base&#xff0c;旨在成为企业的最强大脑。开箱即用&#xff0c;支持快速嵌入到第三方业务系统。 项目链接 github.com/1Panel-dev/MaxKB 项目介绍 MaxKB 是一款基于 LLM 大语言模型的知识库问答系统…

【C++】d1

关键字&#xff1a; 运行、前缀、输入输出、换行 运行f10 前缀必须项&#xff1a; #include <iostream> using namespace std; 输入/输出&#xff1a; cin >> 输入 cout << 输出 语句通过>>或<<分开 换行 endl或者"\n"

防火墙基础技术篇:ensp配置防火墙ssh方式登录

防火墙基础技术篇&#xff1a;ensp配置防火墙ssh方式登录 一、SSH 是什么 历史上&#xff0c;网络主机之间的通信是不加密的&#xff0c;属于明文通信。这使得通信很不安全&#xff0c;一个典型的例子就是服务器登录。登录远程服务器的时候&#xff0c;需要将用户输入的密码传…

TECHNIUM INTERNATIONAL: 利用 AI 和 TECHNIUM 矩阵协议引领区块链创新

在充满活力的加密货币和区块链技术领域&#xff0c;Technium International 以领军者的姿态迅速崛起&#xff0c;跻身科技巨头的顶尖行列。Technium International 成立于 2018 年&#xff0c;总部设于塞席尔&#xff0c;透过人工智慧&#xff08;AI&#xff09;和区块链技术的…

智能跳绳的产品体验与思考(一)

我&#xff0c;虽称不上跳绳高手&#xff0c;却对这项运动怀有深厚的热爱&#xff0c;也曾在某电商平台上选购过一款智能跳绳&#xff0c;希望能借此提升我的跳绳技巧。今天&#xff0c;咱们就来聊聊我和这条绳子的发生的一些故事&#xff0c;外加我的一些思考。 此刻&#xf…

揭秘python模块导入的“隐身术”:如何控制模块代码的执行?

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;两个下划线的奥秘 二、案例展示&#xff1a;模块导入与代码执行 1. 导…

win11中文文件名称乱码解决方案

解压后出现以下的乱码 解决方案 步骤1.winR 输入intl.cpl 或 windows 自带的搜索搜“intl.cpl”&#xff0c;打开这个面板控制项 步骤2.在新打开的区域面板中&#xff0c;选择“管理”标签页&#xff0c;点击下方的“更改系统区域设置”按钮 步骤3.取消"Beta版…"选…

4步成功将三方库——speexdsp移植到OpenHarmony

四步实现三方库移植&#xff1a; 1、在Linux下编译要移植的三仓库&#xff0c;分析编译过程&#xff1b; 2、将要移植的三方库加入编译框架中以及产品引用&#xff1b; 3、增量编译出动态链接库和可执行文件推送到开发板上&#xff1b; 4、在开发板上验证移植是否成功、API接口…

greendao实现增删改查

说明&#xff1a;最近碰到一个需求&#xff0c;在安卓上使用greendao框架&#xff0c;实现增删改查数据 效果图&#xff1a; step1: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript {repositories {go…

Kubernetes——监听机制与调度约束

目录 前言 一、监听机制 1.Pod启动创建过程 2.调度过程 1.指定调度节点 1.1强制匹配 1.2强制约束 二、硬策略和软策略 1.键值运算关系 1.硬策略——requiredDuringSchedulingIgnoredDuringExecution 2.软策略——preferredDuringSchedulingIgnoredDuringExecution …

QTreeWidget 详解

QTreeWidget 详解 QTreeWidget 是 PyQt5 框架中的一个重要部件&#xff0c;它提供了树形结构的视图&#xff0c;可以用于显示层级数据。以下是 QTreeWidget 的详细讲解&#xff0c;包括基本用法、主要方法和属性以及如何与其他组件进行交互。 基本用法 导入模块 要使用 QTree…

基于单片机的自行车里程监测系统的设计

摘 要 &#xff1a;本设计是一种基于单片机的自行车里程监测系统&#xff0c;采用 STC89C52RC 单片机为核心处理芯片&#xff0c;液晶显示器使用 LCD1602 &#xff0c; 速度测量使用霍尔传感器&#xff0c;温度传感器使用 DS18B20 &#xff0c;时间由时钟芯片 DS1302 进行…

增强创作者能力:The Sandbox 首届 “创作者挑战” 回顾

首届 "创作者挑战" 为创作者在平台上赚取收入提供了难得机会。 我们发起 “创作者挑战” 的目的是支持创作者&#xff0c;赋予他们构建元宇宙的能力。我们提出三大行动号召&#xff1a;发布、参与和赚钱。新推出的「参与奖池」&#xff08;Engagement Pool&#xff0…

云计算-Amazon S3

亚马逊S3&#xff08;Amazon S3&#xff09; 亚马逊S3是一种云对象存储设施。我们将使用的对象将是您在个人计算机上常用的文件。亚马逊S3产品旨在可扩展到实际无限数量的对象和无限大小的对象&#xff0c;但我们在本实验室的练习中只会使用少量对象。当存储许多对象时&#xf…

OpenCV学习 基础图像操作(十四):直方图均衡化和直方图规定化

基础原理 直方图操作是基于像素统计的基础图像操作,被广泛运用于调整图像的对比度,并由此衍生出很多变种和该经的方式. 图像相直方图 直方图(Histogram)&#xff0c;又称质量分布图&#xff0c;是一种统计报告图&#xff0c;由一系列高度不等的纵向条纹或线段表示数据分布的…

【强训笔记】day24

NO.1 思路&#xff1a;递归。 代码实现&#xff1a; class Solution { public:bool IsBalanced_Solution(TreeNode* pRoot) {return dfs(pRoot)!-1;}int dfs(TreeNode* root){if(rootnullptr) return 0;int leftdfs(root->left);if(left-1) return -1;int rightdfs(root-…

Vulnhub - AI-WEB-1.0靶机教程

目录 站点信息收集 c段扫描 端口扫描 目录扫描 漏洞利用 使用 burp 抓包 查询数据库名 查询数据库下的表 查询表中的字段名 查询字段中的数据 --os-shell 上传一句话木马 下载地址&#xff1a;https://download.vulnhub.com/aiweb/AI-Web-1.0.7z 我们从站点信息收…

【哈希】闭散列的线性探测和开散列的哈希桶解决哈希冲突(C++两种方法模拟实现哈希表)(1)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 哈希函数与哈希 之 闭散列的线性探测解决哈希冲突 的相关内容。 如…

Echarts圆环图偏移后 中心文字居中对齐实现

像上图中这样圆环图并不在div的中间时&#xff0c;中心的文本需要居中展示 一开始用left百分比但数据一旦变长或变短就会偏移 像这样 实在是太不美观了 所以我们这里使用动态的left通过文本的长度来计算 /*** 计算文本宽度* param {String|Number} text* param {String} font*…