当前位置: 首页 > news >正文

jsp进阶

文章目录

  • jsp进阶
    • 内容回顾
    • JSP 的九大内置对象
    • 内置对象的创建
    • 九大内置对象详解
    • 四大作用域对象
    • 四大作用域范围总结
    • EL 进阶
    • JSTL 标准标签库
    • JSTL 核心标签


jsp进阶

内容回顾

jsp 创建
jsp 的工作原理:翻译 --> 编译 --> 运行
翻译:第一次访问 jsp 页面时,服务器进行 jsp 页面的翻译,将 jsp 翻译为一个 java
类,该类被称为是一个 servlet 类;
jsp 组成:
① 脚本:<% java 代码>
② java 表达式:<%= java 代码>
③ 声明: <%! 变量>
④ jsp 指令:三大指令:page/include/taglib
⑤ el 表达式(${}):是 java 表达式的替代品,可以更简单进行数据的获取
⑥ jsp 动作:
jsp:useBean -- 创建实体类对象
jsp:setProperty -- 指定实体属性的设置
jsp:getProperty -- 获取指定实体类的属性
jsp:forward -- 进行页面的转发
jsp:param -- 页面转发时携带参数的设置
jsp:include -- 动态页面包含,所有涉及到的 jsp 页面,都会翻译成对应的
java 类;

JSP 的九大内置对象

内置对象简介

内置对象也称为隐式对象,不需要人为的创建,在 jsp 页面已经初始化好并且封装好了的,
可以直接使用;九大内置对象分别为:
① application -- 服务器对象
② session -- 会话对象
③ page -- 当前页面,类似与 java 程序中的 this 对象
④ request -- 请求对象
⑤ response -- 响应对象
⑥ out -- 页面输出对象
⑦ config -- 配置对象
⑧ pageContext -- 页面全局对象
⑨ exception -- 异常处理对象

在这里插入图片描述

在 jsp 页面中,使用 <% 快捷键补全 %>,就可以看到 8 个内置对象,exception 对象
没有,exception 是关于页面异常处理的内置对象,需要将 page 指令中 isErrorPage
= "true" 才会显示异常处理对象;
或者使用 pageContext 对象进行获取,pageContext.getException();

内置对象的创建

内置对象不用编程人员创建,系统会自动创建好,那系统什么时候?在哪?进行内置对象的创
建?
通过查看 jsp 页面翻译后的 java 类文件可以查询到,在 翻译后的类文件中会有一个
jspService 方法,在该方法的内部进行了内置对象的创建;

在这里插入图片描述

九大内置对象详解

application

是一个作用域对象,可以将信息保存在服务器中,直到服务器关闭;否则在任意时候我们都可 以从服务器中获取 application域对象中储存的数据;该对象生命周期为服务启动到服务 器关闭;其作用域为整个 web 应用;

request

请求作用域对象,可以将信息保存在一次请求中,主要用于 http 协议传送到服务器的请求数 据。该对象代表了客户端的请求信息,其作用域为一次请求;

response

该对象代表客户端响应信息,主要是将需要的数据发送给客户端,一般返回的是经过容易处理 的或者是有数据渲染的 jsp 页面

config

用于服务器的配置信息描述,可以通过 pageContext 提供的 getServletConfig 方法 进行获取;当一个 servlet 被初始化时,容器会把某些信息通过该对象传递给 servlet; 一般在 web.xml 中进行基本配置;

page

当前页面对象,就跟 this 对象一个意思;

session 对象

域对象,会话对象,服务器启动时会自动为每一个用户创建一个会话对象,用来保存当前用户 的信息;只要浏览器不关闭,在设定的时间内这个用户的信息会保存在session对象中;其作 用域为一次会话

out 对象

请求作用域对象,可以将信息保存在一次请求中,主要用于 http 协议传送到服务器的请求数据。该对象代表了客户端的请求信息,其作用域为一次请求; 该对象代表客户端响应信息,主要是将需要的数据发送给客户端,一般返回的是经过容易处理 的或者是有数据渲染的 jsp 页面;

exception 对象

该对象用于展示页面异常信息,只有在 page 指令设置 isErrorPage = true 后才会创建该对象;该对象几乎继承了所有的异常类,可以描述几乎所有的异常状态;

pageContext 对象

该对象的作用是获取任何范围的参数,因为通过该对象可以获取其他任意的内置对象,该提对 象提供了 getXX() 的方法进行其他内置对象的获取;该对象还可以获取项目的根路径; 获取项目根路径的方法:pageContext.getServletContext.contextPath

四大作用域对象

application:只要服务器不关闭,值永远保存;
session:面对浏览器,只要不主动退出,会话存在,值就存在;
request:面向求情,一次请求;
pageContext:面向页面,某一个页面的作用域;
作用域的范围大小:
application > session > request > pageContext
所有的域对象都有用户参数设置和获取的方法:
setAttribute(key,value);
getAttribute(key)

四大作用域范围总结

该对象用于展示页面异常信息,只有在 page 指令设置 isErrorPage = true 后才会创
建该对象;该对象几乎继承了所有的异常类,可以描述几乎所有的异常状态;
该对象的作用是获取任何范围的参数,因为通过该对象可以获取其他任意的内置对象,该提对
象提供了 getXX() 的方法进行其他内置对象的获取;该对象还可以获取项目的根路径;
获取项目根路径的方法:pageContext.getServletContext.contextPath

EL 进阶

当使用多个域对象设置参数时,使用 el 表达式进行数据获取时,默认是按照最小范围的作用
域开始进行参数的匹配,如果最小的范围中没有该参数,接着往上一个作用域中进行查找,一
直到 application 作用域;
如果所有的作用域中都没有 el 表达式中获取的参数,结果显示为空;
任意一个作用域或者多个作用域中有 el 表示中获取的参数,显示结果为较小的作用域设置的
值;
如果要获取指定作用域中设置的值,是使用 el 表达式进行数据时,可以在获取的参数前面加
上指定的域对象;如果不加会从最小的作用域开始查找;

el 获取数据时无域对象指定

在这里插入图片描述
在这里插入图片描述

el 获取指定域对象中的数据

在这里插入图片描述

在这里插入图片描述

JSTL 标准标签库

简介

JSTL 全称为 JavaServer Pages Standard Tag Labrary --- jsp 标准标签库;
主要提供了供 JavaWeb 开发人员使用的一个标准的标签库,该标签库功能比 html 提供的
标签更强大;可以使用 jstl 提供的标签取代传统的 java 代码;提高的程序的可读性、体
验感、维护性;
JSTL 通常和 el 表达式配合使用,使用 el 表达式来获取数据,用 JSTL 提供的标签来操
作数据;
JSTL 除了有标准的标签库以外,还提供了 JSTL 函数,也可以使用函数进行数据的操作;

JSTL 的使用

① 下载 jar 包,建议使用 1.2 版本,1.1 版本为过时的版本;
② 在 jsp 页面中使用 taglib 指令进行 jstl 的引入;
引入的格式:<% taglib uri="jstl资源路径" prefix="c" %>

在这里插入图片描述
在这里插入图片描述

JSTL 核心标签

通用标签

① 设置参数标签 set
<c:set var="参数名称" value="值" scope="域对象"></c:set>
② 输出标签 out -- 相当于 <jsp:getProperty> 或者是 <%= %>
<c:out value="参数名称"></c:out>
③ 删除标签 remove -- 删除指定参数
<c:remove var="参数名称"></c:remove>

在这里插入图片描述
在这里插入图片描述

分支标签

分支标签类似于 java 中的分支结构;
① 单分支标签 if
<c:if test="条件表达式">标签内容</c:if>
当条件表达式成立,标签内容被执行,条件表达式不成立,标签内容不执行
② 多分支标签 choose - when - otherwise
<choose>
<when test="条件表达式">内部代码</when>
<when test="条件表达式">内部代码</when>
········
<otherwise>内部代码</otherwise>
</choose>
从上往下依次运算 when 标签的条件表达式,如果某个表达式成立,执行对应 when
标签中的内容,一旦某一 when 标签的条件表达式成立,后面所有的 when 标签条件表达式
都不再继续运算;
换句话说,一个 when 标签表达式成立,执行内部的代码,分支结构结束;
只有所有的 when 标签条件表达式都不成立,才会执行 otherwise 标签内部的代
码

单分支结构
在这里插入图片描述
多分支结构

在这里插入图片描述
循环标签

可以对容器进行遍历;
<c:foreach items="需要遍历的容器" var="变量" varStatus="count">
</c:foreach>
items 属性用来指明遍历的容器,容器通常是集合或者数组,使用 el 表达式进行获取;
var 属性用来声明变量,每一次针对容器的遍历结果会储存到 var 声明的变量中
varStatus 属性用来描述当前遍历出来的对象状态,该状态有个属性:
count -- 用来实现对象的计数,序号从 1 开始
index -- 用来表示遍历对象的索引,序号从 0 开始
first -- 获取第一个遍历对象
last -- 获取最后一个遍历对象

在这里插入图片描述
在这里插入图片描述
导入标签

导入标签类似于 include 指令或者动作标签,用来实现其他页面的引入操作;
<c:import url="资源路径"></c:import>
资源路径:一般使用相对路径,也就是项目中存在的其他页面;

JSTL 函数

JSTL 函数大部分是针对字符串的操作;
使用函数之前需要进行函数的引用,就跟使用核心标签库一样,需要通过 page 指定进行指定
uri 访问,和别名的命名;
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"
%>
在引入后就可以使用 jstl 提供的函数;所有的函数如下图:

在这里插入图片描述

相关文章:

jsp进阶

文章目录jsp进阶内容回顾JSP 的九大内置对象内置对象的创建九大内置对象详解四大作用域对象四大作用域范围总结EL 进阶JSTL 标准标签库JSTL 核心标签jsp进阶 内容回顾 jsp 创建 jsp 的工作原理&#xff1a;翻译 --> 编译 --> 运行 翻译&#xff1a;第一次访问 jsp 页面…...

模块化CommonJS、AMD、CMD、ES6

参考链接&#xff1a;https://juejin.cn/post/6844903576309858318 一、 commonjs&#xff08;node实现、缓存值&#xff08;浅拷贝&#xff09;&#xff0c;同步&#xff0c;运行时加载&#xff09; 同步加载模块 module.exportrequire // 定义模块math.js var basicNum …...

Python GUI界面编程-初识

图形用户界面(Graphical User Interface&#xff0c;简称 GUI&#xff0c;又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比&#xff0c;图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置&#xf…...

【Servlet篇4】cookie和session

在这一篇文章当中&#xff0c;我们提到了什么是cookie和session。 【网络原理8】HTTP请求篇_革凡成圣211的博客-CSDN博客HTTP的常见属性&#xff0c;URL&#xff0c;User-Agent&#xff0c;Refer,get 和post的区别https://blog.csdn.net/weixin_56738054/article/details/1291…...

考研流程,可以进来转一转(考研你不知道的事情)(详细版)

之前有听过好多人说要考研&#xff0c;那么&#xff0c;考研的信息&#xff0c;如何获取呢&#xff0c;考研都有哪些流程呢。 初试开始到考试&#xff1a;↓ 1、了解考研信息。 2、确定自己要报考的专业。&#xff08;本专业or跨考&#xff09; 3、选择地区 4、选择要报考的学…...

3.2 LED闪烁流水灯蜂鸣器

LED闪烁1.1 电路连接示意图LED采用低电平点亮的方式&#xff0c;利用ST-Link的3.3V进行供电。1.2程序设计1.21知识储备GPIO配置步骤步骤&#xff1a;1. 第⼀步&#xff0c;使⽤RCC开启GPIO的时钟2. 第⼆步&#xff0c;使⽤GPIO_Init()函数初始化GPIO3. 第三步&#xff0c;使⽤输…...

刷题笔记3 | 203. 移除链表元素、707设计链表,206.反转链表

目录 203. 移除链表元素 707、设计链表 206.反转链表 203. 移除链表元素 题意&#xff1a;删除链表中等于给定值 val 的所有节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a; 输入&#xff1a;h…...

[一篇读懂]C语言十一讲:单链表的删除和单链表真题实战

[一篇读懂]C语言十一讲&#xff1a;单链表的删除和单链表真题实战1. 与408关联解析及本节内容介绍1 本节内容介绍2. 单链表的删除操作实战3. 单链表真题解读与解题设计1 题目解读2 解题设计第一阶段&#xff1a;双指针找中间结点第二阶段&#xff1a;原地逆置第三阶段&#xff…...

【C++初阶】list的使用

大家好我是沐曦希&#x1f495; 文章目录一、前言二、构造三、迭代器四、增删查改1.头插头删2.尾插尾删3.查找和插入4.删除五、其他成员函数1.排序和去重2.splice和remove3.resize一、前言 list本质是带头双向循环链表&#xff0c;本文只对list的一些常用接口进行说明&#xf…...

HTML 布局

网页布局对改善网站的外观非常重要。 请慎重设计您的网页布局。 在线实例 使用 <div> 元素的网页布局 如何使用 <div> 元素添加布局。 使用 <table> 元素的网页布局 如何使用 <table> 元素添加布局。 网站布局 大多数网站会把内容安排到多个列中&a…...

如何在虚拟机中安装ikuai软路由系统

首先访问ikuai官网下载固件固件下载-爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com) 根据需求下载 然后创建一个虚拟机&#xff0c;点击下一步 选择更下载的ISO映像文件&#xff0c;点击下一步 点击下一步 设置一下名称和储存位置&#xff0c;点击下一步 根据需求设置&a…...

Java 多线程 --- 线程协作 wait/notify

Java 多线程 --- 线程协作 wait/notifywait / notifyObject.wait() , Object.notify() / notifyAll()notify 和 wait 的原理notify会导致死锁的问题wait / notify的开销以及问题wait / notify 在多线程中, 如果程序拿到锁之后, 但是没有满足指定条件而不能继续往下执行, 我们可…...

【PyTorch】教程:torch.nn.Hardsigmoid

torch.nn.Hardsigmoid 原型 CLASS torch.nn.Hardsigmoid(inplaceFalse) 参数 inplace (bool) – 默认为 False 定义 Hardsigmoid(x){0if x≤−3,1if x≥3,x/61/2otherwise\text{Hardsigmoid}(x) \begin{cases} 0 & \text{if~} x \le -3, \\ 1 & \text{if~} x \ge 3…...

【手把手一起学习】(八) Altium Designer 20修改和自定义原理图标题栏

1 修改原理图标题栏 直接对原理图标题栏属性进行修改&#xff0c;操作如图所示&#xff1a; 修改后&#xff0c;并不会显示&#xff0c;故该方法不可用&#xff1a; 正确的操作如下&#xff0c;先选择合适的模板&#xff1a; 然后&#xff0c;进行属性的修改&#xff1a; 此时…...

业务流程测试

用例设计主要问题主要问题存在于&#xff1a;1、测试点分析&#xff1a;逻辑性不强对于整个页面功能划分不清晰&#xff1b;不同测试点归类不清晰&#xff1b;不能形成相对固定的套路&#xff0c;书写耗费大量时间...2、测试用例&#xff1a;关于&#xff0c;要细致到什么程度&…...

[极客大挑战 2019]EasySQL 1

[极客大挑战 2019]EasySQL 1解题POC一、解题思路之暴力破解1. 弱口令2. 暴力破解二、解题思路之万能密码1. 什么是万能密码2. 测试过程解题POC 直接点击登录获取flagflag{62f0d2ca-579e-450e-941f-5f7c23a8baf7} 一、解题思路之暴力破解 这题是万能密码&#xff0c;所以暴力破解…...

vulnhub raven2复现

1.扫描全网段&#xff0c;找出了存活主机ip为192.168.85.144 nmap 192.168.85.0/24 2.nmap扫描端口 nmap -p1-65535 192.168.85.144 3.访问此网站&#xff0c;没找到什么地方可以利用漏洞 &#xff0c;查看中间件为wordpress 4.使用dirb对该网站进行目录扫描 dirb http://1…...

LeetCode 剑指 Offer II 079. 所有子集

给定一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[],[1],[2],[1,2],[3…...

打印名片-课后程序(Python程序开发案例教程-黑马程序员编著-第二章-课后作业)

实例3&#xff1a;文本进度条 进度条以动态方式实时显示计算机处理任务时的进度&#xff0c;它一般由已完成任务量与剩余未完成任务量的大小组成。本实例要求编写程序&#xff0c;实现图1所示的进度条动态显示的效果。 下载中下载完成图1文本进度条 实例分析 在本实例中可以将…...

为什么我们在判断字符串不为null后还要判断字符串长度大于0?

我们在做字符串判断时一般会&#xff1a; if (s ! null && s.length() > 0) {} 但是我就在想&#xff0c;字符串不为空了&#xff0c;那么他一定有值&#xff0c;字符串长度不就大于0吗&#xff0c;所以s.length()>0是不是有点多余&#xff1f; 我的思维误区是…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践

01技术背景与业务挑战 某短视频点播企业深耕国内用户市场&#xff0c;但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大&#xff0c;传统架构已较难满足当前企业发展的需求&#xff0c;企业面临着三重挑战&#xff1a; ① 业务&#xff1a;国内用户访问海外服…...