当前位置: 首页 > 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; 我的思维误区是…...

javaEE 初阶 — 应用层中的 DNS 协议(域名解析系统)

文章目录什么是域名1. 如何建立 域名 与 IP 的对应关系2. 域名的分级什么是域名 域名也就是平常所说的网址&#xff0c;比如 www.baidu.com。 其实网络上的服务器要访问这个网址&#xff0c;需要的是 IP 地址。、 但是 IP 地址比较拗口不方便记忆&#xff0c;于是就有使用一些…...

【网络】-- 网络编程套接字(铺垫、预备)

目录 理解源IP地址和目的IP地址 认识端口号 端口号 理解源端口号和目的端口号 套接字 认识TCP与UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 理解源IP地址和目的IP地址 就如同我们唐僧的取经路&#xff1a; 唐僧的出发地到目的地&#xff1a;东…...

一文打通@SentinelResource

Sentinel 提供了 SentinelResource 注解用于定义资源&#xff0c;并提供了 AspectJ 的扩展用于自动定义资源、处理 BlockException 等 如果使用的是Sentinel Annotation AspectJ Extension&#xff0c;需要导这个依赖 <dependency><groupId>com.alibaba.csp</…...

苹果手机备份的文件在电脑什么地方 苹果备份文件怎么查看

在这个网络信息时代&#xff0c;为手机进行定期备份已经成为了家常便饭。在使用备份软件对苹果手机进行备份后&#xff0c;苹果手机备份的文件在什么地方&#xff0c;苹果备份文件怎么查看呢&#xff1f;本文就带大家来了解一下。 一、苹果手机备份的文件在电脑什么地方 大家…...

【MySQL速通篇001】5000字超详细介绍MySQL部分重要知识点

&#x1f340; 写在前面 这篇5000多字博客也花了我几天的时间&#x1f602;&#xff0c;主要是我对MySQL一部分重要知识点的理解【后面当然还会写博客补充噻&#xff0c;欢迎关注我哟】&#xff0c;当然这篇文章可能也会有不恰当的地方【毕竟也写了这么多字&#xff0c;错别字可…...

并发编程——synchronized优化原理

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;耶瞳空间 一&#xff1a;基本概念 使用synchronized实现线程同步&#xff0c;即加锁&#xff0c;实现的是悲观锁。加锁可以使一段代码在同一时间只有一个线程可以访问&#xff0c;在增加安全性的同…...

LeetCode 剑指 Offer II 083. 没有重复元素集合的全排列

给定一个不含重复数字的整数数组 nums &#xff0c;返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 1 < nums.length < 6 -10 < nu…...

JSONObject与JSONArray使用区别

目录 1.使用的场景区别 2. 使用方法区别 3.获取方式不同 4. 解析JSON字符串 5.总结 1.使用的场景区别 想通过键值对的形式获取数据&#xff0c;使用JSONObject。如果后台查询的是某个bean的list集合向前端页面传递&#xff0c;使用JSONArray。 2. 使用方法区别 创建方法不…...

经典C程序例程:通过进程ID得到文件名

通过进程ID得到文件名 #include <stdio.h> #include <windows.h> #include <tlhelp32.h> #include <tchar.h>BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName); void DispProcess(void); void DispPrsFile(void);// typedef BOOL (_stdcall *E…...

【Java】Spring MVC程序开发

文章目录Spring MVC程序开发1. 什么是Spring MVC&#xff1f;1.1 MVC定义1.2 MVC 和 Spring MVC 的关系2. 为什么学习Spring MVC&#xff1f;3. 怎么学习Spring MVC&#xff1f;3.1 Spring MVC的创建和连接3.1.1 创建Spring MVC项目3.1.2 RequestMapping 注解介绍3.1.3 Request…...