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

JSP中http与内置对象学习笔记

本博文讲述jsp客户端与服务器端的http、jsp内置对象与控制流和数据流实现

1.HTTP请求响应机制

HTTP协议是TCP/IP协议中的一个应用层协议,用于定义客户端与服务器之间交换数据的过程

1.1 HTTP请求

HTTP请求由请求行、消息报头、空行和请求数据4部分组成。

  • 请求行由请求方法、URI和HTTP协议版本3个字段组成,之间用空格分隔。常用的请求方法有GET和POST
  • 消息报头由报头域/值对组成,每行一对,报头域和值用英文冒号":"分隔。用于向服务器传递请求的附加信息及客户端本身的信息。典型的请求消息报头有Host、User-Agent、Accept等
  • 空行表示消息报头的结束
  • 请求数据在post方法中使用,get方法不需要请求数据。

1.2 HTTP响应

HTTP响应由状态行、消息报头、空行和响应数据4部分组成

  • 状态行由HTTP协议版本、响应状态代码和响应状态文本描述3个字段组成,之间用空格分隔。常见的响应状态代码及文本描述1有200 ok(表示客户端请求成功)、404 NOT Found(表示请求资源不存在),500 Internal Server Error(表示服务器发生不可预期的错误)
  • 消息报头由报头域/值对1组成,每行一对,报头域和值用英文冒号":"分隔,用于服务器向客户端传递不能在状态行放置的附加响应信息,以及关于服务器的信息和对请求资源进行下一步访问的消息。典型的响应消息报头有Date、ContentType、Content-Length等
  • 空行表示响应消息报头的结束
  • 响应数据是服务器在本次响应中返回给浏览器的数据。

1.3 HTTP会话机制

HTTP协议是一种无状态协议,不保存客户端每次提交的信息。一个HTTP会话代表服务器与浏览器的一次会话过程,这个过程包含连续或时断时续的多次请求响应。

2. JSP内置对象

jsp有9个内置对象

内置对象名称类型作用域用途
requestjavax.servlet.ServletRequestrequest封装了客户端的请求信息,例如包含了通过GET/POST方式传递的参数等信息
responsejavax.servlet.ServletResponsepage封装了服务器端响应信息,例如包含了服务端发送到客户端的响应内容等信息
pageContextjavax.servlet.jsp.PageContextpage封装了当前页面的属性信息
sessionjavax.servlet.http.HttpSessionsession封装了当前请求的会话信息
applicationjavax.servlet.ServletContextapplication封装了整个应用共享的信息
outjavax.servlet.jsp.JspWriterpage用于向客户端输出信息
configjavax.serevlet.ServletConfigpage封装了JSP页面对应Servlet的配置信息
pagejava.lang.ObjectpageJSP页面类的实例,即JSP页面本身被编译后生成一个名为page的实例对象
exceptionjava.lang.Throwablepage封装了发生的异常信息

2.1 request对象

当用户通过浏览器向Web服务器发出请求时,Web服务器接收到用户的请求信息,在进行必要的逻辑处理后,对该请求作出响应。
在这里插入图片描述

方法声明功能简介
getParameter(String name)获取客户端提交的名称为name的请求参数值,不存在则返回null
getParameterValues(String name)获取客户端提交的名称为name的所有请求参数值,不存在则返回null
setCharacterEncoding(String emv)设置请求数据的字符编码类型
getCharacterEncoding()获取请求数据的字符编码类型
setAttribute(name,Object o)设置请求中name的属性值为0
getContentLength()获取请求数据的长度,单位是字节,长度未知则返回-1
getContentType()获取请求数据MIME类型;类型未知则返回null
getProtocol()获取客户端向服务器传送数据的通信协议名称和版本

2.2 response对象

response对象代表服务器对客户端做出的响应,将JSP页面的运行结果返回给客户端,与request对象结合起来完成动态页面的交互功能。

方法声明功能简介
setContentType(String type)设置响应数据的MIME类型
getContentType()获取响应数据的MIME类型
setHeader(String name,String value)设置指定的响应报文头
sendRedirect(String location)重定向到地址为locatioin的Web资源
addCookie(Cookie cookie)向响应中添加cookie,用于在客户端保存信息
getWriter()获取响应的printWriter对象,用于输出响应数据
flushBuffer()立即将缓冲区的内容发送到客户端
对比项请求转发页面重定向
URL地址的限制只能在同一个应用中转发可以1跳转到任意的URL
地址栏URL是否有变化不变有变化
客户端请求的次数一次两次
行为的主体服务端的行为客户端的行为
请求信息是否可以共用共用相同的request,所以请求的信息不会丢失两次请求使用不同的request,所以请求的信息会丢失

2.3 Cookie机制

客户端应答速度较快,而cookie是保存信息文本。cookie机制

方法声明功能简介
getName()获取cookie的名称
getValue()获取Cookie的值
setValue(String value)创建cookie后,为褀其设置新的值、
getMaxage()获取Cookie的最大生存周期(以秒为单位),默认情况下,-1表示Cookie将持续下去,直到浏览器关闭
setMaxage(int expiry)设置Cookie过期时间(以秒为单位)
getPath()返回Cookie适用的路径
setPath(String uri)设置Cookie适用的路径,如果不指定路径,与当前页面相同目录(包括1子目录下的所有URL都会返回Cookie

2.4 session对象

方法声明功能简介
getAttribute(String name)获取session对象中国名为name的属性值,不存在则为null
removeAttribute(String name)删除session对象中名称为name的属性
setAttribute(String name,Object value)设置session对象的属性,属性名为name,属性值为value

2.5 out对象

方法声明功能简介
println(String x)向客户端发送数据的输出字符串换行
print(String s)向客户端输出字符串
newLine()向客户端输出换行,同println()类似
isAutoFlush()判断是否是自动向客户端输出缓冲区的数据
getBufferSize()获取缓冲区大小
getRemaining\ 获取缓冲区未使用的字节大小

2.6 application对象

JSP引擎启动时会产生一个application对象,之后该对象会一直保持到JSP引擎关闭。当不同用户请求可将用户信息保存在服务器端,直到服务器关闭。

方法声明功能简介
getAttribute(String name)获取application内置对象中名称为name的属性值,不存在则返回null
reemoveAttribute(String name)删除application内置对象中名称为name的属性
setAttribute(String name,Object object)设置application内置对象中属性,名称为name,属性值为object
getRealPath(String path)获得虚拟路径path对应的实际路径
getContextPath()获取当前web应用程序的根目录

3. 控制流和数据流的实现

3.1 JSP页面间流程控制

  • 超链接方法
  • 表单提交方法
  • 页面重定向方法
  • 请求转发方法

3.2 JSP页面间数据传递

  • 表单传参
  • URL传参
  • /jsp:param标记传参
  • 作用域传参(application,session,request,page)

相关文章:

JSP中http与内置对象学习笔记

本博文讲述jsp客户端与服务器端的http、jsp内置对象与控制流和数据流实现 1.HTTP请求响应机制 HTTP协议是TCP/IP协议中的一个应用层协议,用于定义客户端与服务器之间交换数据的过程 1.1 HTTP请求 HTTP请求由请求行、消息报头、空行和请求数据4部分组成。 请求行…...

Windows Server 2016远程桌面配置全过程

镜像下载 系统镜像网址 本次下载的是 Windows Server 2016 (Updated Feb 2018) (x64) - DVD (Chinese-Simplified) 远程桌面配置 Step 1 在开始菜单搜索服务,打开服务器管理器,点击右上角的管理按钮 Step 2 添加角色控制,点击下一步 S…...

SPI通讯简介

一、基本概念 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,主要应用在EEPROM,FLASH,实时时钟,AD转换器,多MCU间通讯等等,SPI端口可以在多主器件…...

Python 迭代器

迭代器协议 对象必须提供一个 next() 方法,执行该方法要么迭代下一项,要么就引起一个 StopIteration异常以终止迭代(只能往后不能往前)—— 迭代器协议 协议是一种约定,可迭代对象实现了迭代器协议(for、…...

Python语言零基础入门教程(二十七)

Python OS 文件/目录方法 Python语言零基础入门教程(二十六) 61、Python os.utime() 方法 概述 os.utime() 方法用于设置指定路径文件最后的修改和访问时间。 在Unix,Windows中有效。 语法 utime()方法语法格式如下: os.uti…...

Redis基础操作以及数据类型

目录 Redis基础操作 java中的i是不是原子操作?不是 数据类型 1. list 2. set 3. Hash哈希 4. Zset有序集合 Redis基础操作 set [key] [value] 设置值 (设置相同的会将原先的覆盖) get [key] 获取值 不能覆盖和替换 ttl [key] 以秒为单…...

自抗扰控制ADRC之反馈控制律(NLSEF)

目录 前言 1.非线性状态误差反馈控制律(NLSEF) 1.1 控制律形式 1.2 控制量的生成(或者说扰动的补偿) 1.2.1补偿形式① 1.2.1补偿形式② 2.仿真分析 2.1仿真模型 2.2仿真结果 前言 前面的两篇博客依次介绍了TD微分跟踪器安排过渡过程、扩张观测器: 自抗扰…...

“生成音乐“ 【循环神经网络】

前言 本文介绍循环神经网络的进阶案例,通过搭建和训练一个模型,来对钢琴的音符进行预测,通过重复调用模型来进而生成一段音乐; 使用到Maestro的钢琴MIDI文件 ,每个文件由不同音符组成,音符用三个量来表示…...

能否手写vue3响应式原理-面试进阶

(二)响应式原理 利用ES6中Proxy作为拦截器,在get时收集依赖,在set时触发依赖,来实现响应式。 (三)手写实现 1、实现Reactive 基于原理,我们可以先写一下测试用例 //reactive.spe…...

前端工程师leetcode算法面试必备-简单的二叉树

一、前言 本难度的题目主要考察二叉树的基本概念和操作。 1、基本概念 树是计算机科学中经常用到的一种非线性数据结构,以分层的形式存储数据。二叉树是一种特殊的树结构,每个节点最多有两个子树,通常子树被称作“左子树”和“右子树”。 …...

【什么程度叫熟悉linux系统】

一、编译内核 1、Linux系统背景:Ubuntu 2、内核源码kernel.org进行下载 3、解压内核源文件linux-6.1.12.tar.xz、命令:tar -xvf linux-6.1.12.tar.xz 4、进入解压好的文件inux-6.1.12 5、配置内核命令:make menuconfig(需要进…...

编译安装MySQL

MySQL 5.7主要特性 随机root 密码:MySQL 5.7 数据库初始化完成后,会自动生成一个 rootlocalhost 用户,root 用户的密码不为空,而是随机产生一个密码。原生支持:Systemd 更好的性能:对于多核CPU、固态硬盘、…...

Kubernetes一 Kubernetes之入门

二 Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应…...

SQLServer2000 断电后数据库suspect“置疑”处理

SQLServer2000 断电后数据库suspect“置疑”处理 背景介绍: 前些天加班时候,接到小舅子微信,说一个客户的winXP 机器上sql2000的数据库在断电重启后,数据库执行命令时提示suspect“置疑”错误。小舅子电子工程师,对数…...

多模态机器学习入门Tutorial on MultiModal Machine Learning——第一堂课个人学习内容

文章目录课程记录核心技术Core Technical Challengesrepresentation表示alignment对齐转换translationFusion融合co-learning共同学习总结Course Syllabus教学大纲个人总结第一周的安排相关连接课程记录 这部分是自己看视频,然后截屏,记录下来的这部分的…...

Java ~ Collection/Executor ~ LinkedBlockingDeque【总结】

一 概述 简介 LinkedBlockingDeque(链接阻塞双端队列)类(下文简称链接阻塞双端队列)是BlockingDeqeue(阻塞双端队列)接口的唯一实现类,采用链表的方式实现。链接阻塞双端队列与LinkedBlockingQu…...

.NET7的AOT的使用

背景其实,规划这篇文章有一段时间了,但是比较懒,所以一直拖着没写。最近时总更新太快了,太卷了,所以借着 .NET 7 正式版发布,熬夜写完这篇文章,希望能够追上时总的一点距离。本文主要介绍如何在…...

分布式缓存的问题

1,Redis缓存穿透问题 Redis缓存穿透问题是指查询一个一定不存在的数据,由于这样的数据缓存一定不命中,所以这样的请求一定会打到数据库上。但是由于数据库里面也没有这样数据,且也没有将这样的null值缓存到数据库,从而造成这样的…...

golang入门笔记——内存管理和编译器优化

静态分析 静态分析:不执行程序代码,推导程序的行为,分析程序的性质 控制流(control flow):程序的执行流程 数据流(data flow):数据在控制流上的传递 通过分析控制流和…...

GEE学习笔记 七十:【GEE之Python版教程四】Python基础编程二

通过上一章的讲解,我们对于python有了初步的了解,这一章就详细讲解一下python的各个变量以及运算规则等内容。 关于测试代码推荐初学者将每一段代码都自己敲入编辑器中在本地运行。 1、数值 这是任何编程中都会有的基本变量,在python支持的…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...