当前位置: 首页 > 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;这些传…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...