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

Request Response

简介

Request(请求) & Response(响应)

浏览器会向服务器发送请求数据,服务器也需要返回响应数据给浏览器,因此我们需要设置对应的类来代表请求数据和响应数据,且Servlet中的service方法就需要对应的请求数据和响应数据的参数

Request:存放请求数据,可以通过request对象来获取请求数据

Response:存放响应数据,可以通过response对象设置响应数据

Resquest

Request继承体系

1.Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中

2.Tomcat的实现类实现至HttpServletRequest接口,因此使用resquest对象时,可以查阅JavaEE API文档的HttpServletRequest接口

Resquest获取请求数据

获取请求数据

请求数据分为3部分:

1.请求行:

注:getRequestURL()返回的参数为StringBuffer类型,其他方法返回的参数均为String类型

2.请求头

该方法可以通过请求头的名称来得到对应的值

3.请求体

这两个方法分别会返回字节输入流和字符输入流,通过返回的输入流即可读取请求体

若请求体中为字符串信息,则使用字符输入流即可

若请求体中包含图片等信息,则需要使用字节输入流

通用方式获取请求参数

Request在得到请求数据后,会自动解析请求参数,如图,先将参数分离,再将名称和值分离,最后封装到Map集合中,且由于名称可能会重复,即键可能会重复,因此值为数组类型

Request对象提供相应的方法来得到请求参数

idea更改Servlet模板

在使用通用方式获取请求参数后,屏蔽了GET和POST的请求方式代码的不同,则代码可以定义为如下格式:

在idea中,当jar包中包含Servlet后,创建类时可以直接创建Servlet类,会自动继承相应的类,并且重写方法,但默认模板中方法中不包含任何内容,路径格式也和图片不同,因此可以更改模板的样式

方法如下:

请求参数中文乱码处理

请求参数中包含中文时会乱码

POST

POST获取请求参数时会获取一个字符输入流,并通过流来读取数据,而Tomcat默认该流的编码不是UTF-8,因此会出现中文乱码现象,更改默认流的编码即可

GET

乱码原因:

浏览器在得到中文数据后会使用UTF-8来对其进行URL编码,但Tomcat的解码为ISO_8859_1,且没有提供更改方式,因此导致乱码

解决方案:

可以将得到的乱码的数据编码成字节数组,在对字节数组进行解码

注:

1.图中使用的是编码方式的常量,有自动提示,也可以直接使用字符串来表示对应的编码方式

2.这个方法是通用方法,也适用POST

Tomcat 8.0 之后已经将GET请求乱码的问题解决,设置默认的解码方式为UTF-8

请求转发

请求转发(forward):一种在服务器内部的资源跳转方式

实现方式

该代码中只有资源B的路径需要修改

请求转发资源间共享数据

我们可以将一些数据通过Request对象从一个资源带到另一个资源

以上三个Request对象的方法,分别代表

将数据储存到request域中(需要提供一个字符串类型的键,和任意类型的值)

从request域中得到值(需要提供键名)

从request域中删除键值对(需要提供键名)

请求转发特点

1.浏览器地址栏路径不发生变化

2.只能转发到当前服务器的内部资源

3.一次请求,可以在转发的资源间使用request共享数据

Response

Response继承体系

Response设置响应数据

响应数据分为3部分:

1.响应行

2.响应头

3.响应体

Response完成重定向

重定向

重定向(Redirect):一种资源跳转方式

如图,浏览器向资源A发送请求,资源A向浏览器响应,告知需要重定向以及资源B的路径,浏览器再次向资源B发送请求

实现方式

如图,需要设置状态码为302来告知浏览器需要重定向,以及需要响应头中设置重定向的资源路径

可以简化成一行代码

重定向特点

1.浏览器地址路径发生变化(两次请求均由浏览器发出,地址为访问资源A,在访问后地址会变为资源B)

2.可以重定向到任意位置的资源(服务器内部、外部均可)

3.两次请求,不能在多个资源使用request共享数据

资源路径问题

在进行请求转发和重定向时,对应的资源B的路径一个需要加虚拟目录,一个不需要

标准:明确路径是谁在使用

浏览器使用:需要加虚拟目录(项目访问路径)

服务端使用:不需要加虚拟目录

例:

如图,分别为

超链接:由浏览器访问,加虚拟目录

表单:由浏览器发送,加虚拟目录

请求转发:在服务端内部使用,不加虚拟目录

重定向:由浏览器访问,加虚拟目录

由于可以在pom.xml中使用<configuration>下的<path>标签来修改虚拟路径的地址,因此在使用虚拟路径时,可以动态的获取虚拟目录,来降低代码的耦合性

响应字符数据

使用

1.通过Response对象获取字符输出流

2.写数据

注意事项

1.响应数据时可以响应标签,如:

在相应时会将“aaa”设置成标题1的形式

但是默认浏览器会将标签当作字符串来识别,因此需要设置对应的响应头,如图

该代码设置了响应头,届时浏览器会以html的解析引擎来解析响应数据

2.中文乱码

由于tomcat通过Response获取的字符输出流默认编码为:ISO-8859-1,因此输出中文时会乱码,可以通过下述方法解决

response.setContentType("text/html;charset=utf-8");

该方法可以同时设置响应头和流的编码,即该行代码可以同时解决识别标签和中文乱码的问题

3.得到的字符输出流不需要关闭,在响应结束后,response对象销毁,该流会随之关闭

响应字节数据

使用

1.通过response对象获取字节输出流

2.写数据

IOUtils工具类使用

可以通过该工具类快速完成复制等操作

1.导入坐标

2.使用

相关文章:

Request Response

简介 Request&#xff08;请求&#xff09; & Response&#xff08;响应&#xff09; 浏览器会向服务器发送请求数据&#xff0c;服务器也需要返回响应数据给浏览器&#xff0c;因此我们需要设置对应的类来代表请求数据和响应数据&#xff0c;且Servlet中的service方法就需…...

How to convert .py to .ipynb in Ubuntu 22.04

How to convert .py to .ipynb in Ubuntu 22.04 jupyter nbconvertp2j 最近看到大家在用jupyter notebook&#xff0c;我也试了一下&#xff0c;感觉还不错&#xff0c;不过&#xff0c;也遇到了一些问题&#xff0c;比方说&#xff0c;我有堆的.py文件&#xff0c;如果要一个一…...

【prometheus-operator】k8s监控集群外redis

1、部署exporter GitHub - oliver006/redis_exporter: Prometheus Exporter for Redis Metrics. Supports Redis 2.x, 3.x, 4.x, 5.x, 6.x, and 7.x redis_exporter-v1.57.0.linux-386.tar.gz # 解压 tar -zxvf redis_exporter-v1.57.0.linux-386.tar.gz # 启动 nohup ./redi…...

MySQL索引(图文并茂)

目录 一、索引的概念 二、索引的作用 三、创建索引的原则依据 四、索引的分类和创建 1、索引的分类 2、索引的创建 2.1 普通索引 2.1.1 直接创建索引 2.1.2 修改表方式创建 2.1.3 创建表的时候指定索引 2.2 唯一索引 2.2.1 直接创建唯一索引 2.2.2 修改表方式创建 …...

Redis 教程系列之Redis PHP 使用 Redis(十二)

PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前&#xff0c; 我们需要确保已经安装了 redis 服务及 PHP redis 驱动&#xff0c;且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动&#xff1a;下载地址为:https://github.com/phpredis/phpredis/releases。 P…...

JavaScript语法和数据类型

基础 JavaScript 借鉴了 Java 的大部分语法&#xff0c;但同时也受到 Awk、Perl 和 Python 的影响。 JavaScript 是区分大小写的&#xff0c;并使用 Unicode 字符集。举个例子&#xff0c;可以将单词 Frh&#xff08;在德语中意思是“早”&#xff09;用作变量名。 var Frh …...

解决华为云服务器宝塔面板无法访问显示“此站点的连接不安全”问题

已经配置好安全组以及初始化宝塔面板&#xff0c;还是无法访问镜像管理页面&#xff0c;提示此站点的连接不安全。 解决方案 将地址https改为http即可进入。 成功登录后&#xff0c;开启面板SSL即可。...

【Python】 Python脚本实现某平台视频流下载

亲爱的玛丽 我会想念着你 我是多么的讨厌分离 加油站旁的海鸥 机场路上的松柏 挥挥手眼泪就落下来 我多想和那些光阴永远住下来 我不能 我不能 &#x1f3b5; 赵雷《玛丽》 在视频内容的分发上&#xff0c;m3u8格式的视频流越来越常见。它将视频切分成多个…...

LangChain核心模块 Model I/O——Prompts

Prompts ​ 语言模型的提示是用户提供的一组指令或输入&#xff0c;用于指导模型的响应&#xff0c;帮助模型理解上下文并生成相关且连贯的基于语言的输出&#xff0c;例如回答问题、完成句子或参与某项活动。对话。 关键问题 如何在LLMs中使用少量示例(few-shot examples)—…...

关于Docker守护程序未运行导致的错误

01 在启动Docker之前&#xff0c;确保你已经安装了Docker并且Docker服务是运行的。以下是一些步骤可以帮助你解决这个问题&#xff1a; 首先&#xff0c;确保Docker已经正确安装在你的系统上。你可以通过运行以下命令来检查Docker是否已安装&#xff1a; docker --version如果…...

Unity中关于SendMessage方法

在Unity中&#xff0c;SendMessage 方法用于在游戏对象及其所有子对象上调用指定名称的方法。这种方法可以用于在不需要知道接收方的确切类型的情况下&#xff0c;向游戏对象发送消息。 基本语法如下&#xff1a; void SendMessage(string methodName, object value null, S…...

C++ 修饰符类型

C 允许在 char、int 和 double 数据类型前放置修饰符。修饰符用于改变基本类型的含义&#xff0c;所以它更能满足各种情境的需求。 下面列出了数据类型修饰符&#xff1a; signedunsignedlongshort 修饰符 signed、unsigned、long 和 short 可应用于整型&#xff0c;signed …...

生产计划数据模型,实现能源企业数字化高效管理

随着市场经济的快速发展&#xff0c;能源企业在经济发展中的地位也随之提高。但由于能源企业在生产计划经济管理上存在指标不平衡、市场观念落后和环保意识欠缺等问题&#xff0c;导致企业的经济效益降低。目前&#xff0c;提高企业的生产计划管理是改善能源企业现状最有利的途…...

【chemistry 2】蛋白质的共价结构

&#x1f31e;欢迎来到生物化学的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年3月26日&…...

什么是 UI ?设计师为你解答

用户界面&#xff08;UI&#xff09;它是人与机器互动的载体&#xff0c;也是用户体验&#xff08;UX&#xff09;一个组成部分。用户界面由视觉设计 (即传达产品的外观和感觉) 和交互设计 (即元素的功能和逻辑组织) 两部分组成。用户界面设计的目标是创建一个用户界面&#xf…...

pytest框架入门及环境配置

一、简介 pytest是python的专用测试框架,由于设计的巧妙性,使得pytest使用起来更加的灵活简单。pytest框架有着强大的功能,拥有很多的第三方插件,还具有良好的扩展性,可以与其他的框架进行结合使用。 pytest的优点: 1、可以与一些调度工具结合,实现持续集成 2、与allu…...

unity 2d范围检测:怪物检测范围

需求 实现怪物有一定范围的侦测能力&#xff0c;当目标进入侦测范围内后&#xff0c;自动追踪目标[使用unity navmash实现]&#xff0c;当子弹进入时&#xff0c;销毁子弹&#xff0c;播放怪物死亡动画以及其他事件。 实现方案 实现怪物在主角靠近一定范围内时发动攻击的功能…...

外包干了10天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…...

后端常问面经之Java基础

基本数据类型 Java中有8种基本数据类型&#xff1a; 6种数字类型&#xff1a; 4种整数型&#xff1a;byte、short、int、long 2种浮点型&#xff1a;float、double 1种字符类型&#xff1a;char 1种布尔类型&#xff1a;boolean 数据类型的默认值以及所占空间如下&#x…...

I.MX6ULL_Linux_驱动篇(58)linux IIO驱动

工业场合里面也有大量的模拟量和数字量之间的转换&#xff0c;也就是我们常说的 ADC 和 DAC。而且随着手机、物联网、工业物联网和可穿戴设备的爆发&#xff0c;传感器的需求只持续增强。比如手机或者手环里面的加速度计、光传感器、陀螺仪、气压计、磁力计等&#xff0c;这些传…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...