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个内置对象
| 内置对象名称 | 类型 | 作用域 | 用途 |
|---|---|---|---|
| request | javax.servlet.ServletRequest | request | 封装了客户端的请求信息,例如包含了通过GET/POST方式传递的参数等信息 |
| response | javax.servlet.ServletResponse | page | 封装了服务器端响应信息,例如包含了服务端发送到客户端的响应内容等信息 |
| pageContext | javax.servlet.jsp.PageContext | page | 封装了当前页面的属性信息 |
| session | javax.servlet.http.HttpSession | session | 封装了当前请求的会话信息 |
| application | javax.servlet.ServletContext | application | 封装了整个应用共享的信息 |
| out | javax.servlet.jsp.JspWriter | page | 用于向客户端输出信息 |
| config | javax.serevlet.ServletConfig | page | 封装了JSP页面对应Servlet的配置信息 |
| page | java.lang.Object | page | JSP页面类的实例,即JSP页面本身被编译后生成一个名为page的实例对象 |
| exception | java.lang.Throwable | page | 封装了发生的异常信息 |
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支持的…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
