javaWeb RequestResponse

news2024/11/23 17:02:49

Request

Request 继承体系

 

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

。Java提供了接口,tomcat的RequestFacade提供了实现。

Request 获取请求数据

请求数据分为3部分:

请求行:

GET /request-demo/req1?username=zhangsan HTTP/1.1

String getMethod():获取请求方式: GET

String getContextPath():获取虚拟目录(项目访问路径): /request-demo

StringBuffer getRequestURL(): 获取URL(统一资源定位符):http://localhost:8080/request-demo/req1

String getRequestURI():获取URI(统一资源标识符): /request-demo/req1

String getQueryString():获取请求参数(GET方式): username=zhangsan&password=123

请求头:

浏览器客户端版本信息:User-Agent: Mozilla/5.0 Chrome/91.0.4472.106

请求体:

username=superbaby&password=123

ServletInputStream  getInputStream():获取字节输入流

BufferedReader getReader():获取字符输入流reader.readLine为读取一行。

Request 通用方式获取请求参数

GET请求获取方式:String getQueryString()

POST请求获取方式:BufferedReader getReader()

通用方式获取请求参数:

Map<String, String[ ]> getParameterMap():获取所有参数Map集合(之所以值是字符串数组是因为)

String[ ] getParameterValues(String name) :根据名称获取参数值(数组)

String getParameter(String name):根据名称获取参数值(单个值)

网关过滤器里,给请求放header:

//存储header中

ServerHttpRequest serverHttpRequest = request.mutate().headers(httpHeaders -> {

    httpHeaders.add("userId", userId + "");

}).build();

//重置请求

exchange.mutate().request(serverHttpRequest);

Tomcat7的乱码问题

根源在于浏览器采取UTF-8编码,而tomcat定义好了ISO-8859-1的编码方式(Tomcat 8.0 之后,已将GET请求乱码问题解决,设置默认的解码方式为UTF-8)

 

post请求解决乱码:

req.setCharacterEncoding(“UTF-8");

get/post通用解决乱码:

new String(获取到的菜蔬.getBytes("ISO-8859-1"),"UTF-8");

拓展:URL编码时,每个汉字占三个字节

1. 将字符串按照编码方式转为二进制

2. 每个字节转为2个16进制数并在前边加上%

请求转发(forward)

一种在服务器内部的资源跳转方式。

转发方式:

req.getRequestDispatcher("/访问路径").forward(req,resp);

请求转发的服务间共享数据:

使用Request对象

void setAttribute(String name, Object o):存储数据到 request域中;

Object getAttribute(String name):根据 key,获取值

void removeAttribute(String name):根据 key,删除该;键值对。

请求转发特点:

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

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

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

Response

Response继承体系

 

响应数据分为3部分:

响应行:HTTP/1.1 200 OK

void setStatus(int sc) :设置响应状态码

响应头:Content-Type: text/html

设置响应头键值对:void setHeader(String name, String value)

响应体:<html><head>head><body></body></html>

PrintWriter getWriter():获取字符输出流

ServletOutputStream getOutputStream():获取字节输出流

Response 重定向功能(Redirect)

实现方式:

resp.setStatus(302);

resp.setHeader(“location”,“要跳转的路径");

简化的写法就是:

resp.sendRedirect("要跳转的路径");

重定向特点:

浏览器地址栏路径发生变化;

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

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

路径问题(加不加虚拟路径)

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

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

Response 响应字符数据

先获取字符流。

PrintWriter writer = resp.getWriter();

writer.write("aaa");

这个流不需要关闭,随着响应结束,response对象销毁,由服务器关闭。

中文数据乱码:

原因通过Response获取的字符输出流默认编码:ISO-8859-1

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

Response 响应字节数据

案例,向前端输出一张图片。

ServletOutputStream outputStream = resp.getOutputStream();

outputStream.write(字节数据);

借助io工具类复制流:

<dependency>

    <groupId>commons-io</groupId>

    <artifactId>commons-io</artifactId>

    <version>2.6</version>

</dependency>

IOUtils.copy(输入流,输出流);

@GetMapping("/getPic")

    public void getPic(HttpServletRequest req, HttpServletResponse res) throws IOException {

        FileInputStream fio = new FileInputStream("C:\\Users\\YUAN\\Desktop\\tii.webp");

        ServletOutputStream os = res.getOutputStream();

        IOUtils.copy(fio, os);

        fio.close();

        os.close();

    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一台手机即可完成 3D 建模,功能有多强大? #Luma AI

AIGC 的出现拓展了内容生产的诸多可能&#xff0c;借助 AI 技术来进行 3D 建模&#xff0c;可以节省不少的时间&#xff0c;市面上也出现了许多功能强大的 3D 建模工具。1 月 9 日&#xff0c;AppStore 上架了一款名为“Luma AI”的软件&#xff0c;能够将现实中的 2D 照片快速…

通过Terraform创建GCP Pubsub

1 简介 Terraform是管理许多平台的基础设施的工具&#xff0c;如AWS、GCP和Azure。这篇文章将讲解如何通过Terraform来管理GCP Pub/Sub。 创建GCP项目请参考&#xff1a;初始化一个GCP项目并用gcloud访问操作 2 Terraform创建Pub/Sub 2.1 下载Terraform插件 我们需要安装G…

【Blende UV映射01】创建UV 使用UV贴图处理纹理

写在前面 这是进行云渲染的最后一步&#xff0c;实践&#xff01;&#xff01; 会跟着这个Blender 2.8 UV Mapping教程快速学习一边UV映射的东西&#xff0c;已经是最最最最基础的了。 本文是教程的P1-P7的过程记录。 1 UV映射 拿一个3D物体&#xff0c;怎么去切割它&…

1301. C 循环(扩展欧几里得算法)

题目如下&#xff1a; 思路 or 题解: 抽象出数学公式&#xff1a; ak∗c≡b(mod1<<k)a k * c \equiv b (mod\ 1 << k)ak∗c≡b(mod 1<<k) 等价&#xff1a; x∗c−y∗(1<<k)b−ax * c - y * (1 << k) b - ax∗c−y∗(1<<k)b−a 用扩展欧…

[Python逆向] 逆向Pyinstaller打包的exe文件源码及保护

Python逆向Pyinstaller打包的exe文件源码及保护 写在前面 我们都知道可以使用Pyinstaller库可将.py文件编译成.exe文件运行&#xff0c;这篇文章我们就从将脚本编译成.exe并将.exe的源码内容反编译出源文件&#xff0c;再顺便谈谈如何防止被逆向。 环境工具 Python 3.6&#x…

(一)MicroPython——WIFI点灯

目录 学习目标 成果展示 硬件知识 代码 总结 学习目标 成果展示 预备知识 代码 总结 学习目标 我们今天来学习有关MicroPython的知识点&#xff0c;相比于用C语言来开发&#xff0c;MicroPython有许多的优点&#xff0c;比如可以交互&#xff0c;有大量的库可以调…

Allegro如何把快速BUS组高亮成不同颜色操作指导

Allegro如何把快速BUS组高亮成不同颜色操作指导 在做PCB设计的时候,会需要把BUS组高亮成不同颜色,方便评估与布线,Allegro支持快速把BUS高亮成不同的颜色,如下图 具体操作如下 打开颜色管理器出现颜色管理器

1576_AURIX_TC275_MTU控制与状态寄存器

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 在这一页之前&#xff0c;连续有好几个寄存器都是预留的&#xff0c;因此可以直接跳过。访问使能寄存器的功能&#xff0c;从描述看其实是非常熟悉的&#xff0c;因为这个描述的模板可以从…

Java多线程:线程通信:生产者 和 消费者 || 顺序打印

Java多线程&#xff1a;线程通信&#xff1a;生产者 和 消费者 || 顺序打印 每博一文案 靠谱&#xff0c;是最高级的聪明&#xff1a;师父说&#xff1a;人生一回&#xff0c;道义一场。你对人对事的态度&#xff0c;藏着你一生的福报。 千金难买好人缘&#xff0c;人活的就是…

Android编译Skia库

Android编译Skia库 本文档提供两种方法编译Skia库 使用aosp源码进行编译使用skia源码进行编译 两种编译方法都可以编译,并且都可以使用在多个平台中,且可以使用在不同Android版本中 使用aosp源码编译 第一步是拿到aosp的源码.因为写这篇教程,使用的是msm8996的源码,因此,我…

Armitage图形化前端

开源免费图形前端 ● 作者自称是众多不会使用metasploit的安全专家之一&#xff08;命令行&#xff09; ● MSF基于命令行&#xff0c;缺少直观的GUI图形用户接口 Armitage只是调用MSF的漏洞利用能力 ● Armitage的每一个GUI操作都可以对应MSF中的一条命令 红队团队合作模拟…

OSCP vulhub LORD OF THE ROOT: 1.0.1

vulhub LORD OF THE ROOT: 1.0.1靶场信息&安装Description一、信息收集第一种ssh爆破第二种猜二、漏洞探测三、漏洞利用四、提权第二种方法&#xff1a;udf提权第三种缓冲区溢出提权靶场信息&安装 地址&#xff1a;https://www.vulnhub.com/entry/lord-of-the-root-10…

APSIM练习:向管理组件添加额外规则

“标准”作物管理组件没有提供很多选项来决定何时播种作物——很可能应该考虑一系列额外的种植规则&#xff08;例如&#xff0c;土壤是否足够干燥以驱动拖拉机过去&#xff1f;&#xff09;&#xff0c;并且在播种时应采取额外措施&#xff08;例如添加一些肥料&#xff09;。…

Tofu目标识别跟踪模块介绍

1.简介Tofu3 是多波段视频物体识别跟踪模块&#xff0c;支持可见光视频与红外视频的输入&#xff0c;支持激光补光变焦自适应控制&#xff0c;支持视频下的多类型物体检测、识别、跟踪等功能。产品支持视频编码、设备管理、目标检测、深度学习识别、跟踪等功能&#xff0c;提供…

服务器防勒索病毒场景分析经验分享

服务器防勒索病毒 l 场景描述 互联网飞速发展&#xff0c;各企业均搭建了自己的服务器。包括文件服务器、代码服务器、业务系统服务器、数据库服务器等。目前大多数企业使用的服务器系统以Windows Server和Linux&#xff08;Centos&#xff09;居多&#xff0c;但随着国产操作…

python从入门到实践————图形界面(上)

系列文章目录 文章目录系列文章目录前言窗体组件窗体显示显示窗体文本显示项目实践总结前言 图形用户接口&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;是人机交互的重要技术手段&#xff0c;在Python中利用tkinter模块就可以方便地实现图形界面。 在你p…

每日一题:Leetcode203 移除链表元素

文章目录 系列&#xff1a;链表专练 语言&#xff1a;java & go 题目来源&#xff1a;Leetcode203 移除链表元素 难度&#xff1a;简单 考点&#xff1a;头结点 && 虚拟头结点 思路和参考答案文章目录题目描述思路java参考代码go参考代码&#xff1a;题目描述 给…

xcelium——重要特性——提高编译仿真性能

以下图片来自于CadenceTECHTALK研讨会 解决编译仿真的瓶颈问题&#xff0c;提高整体性能 影响performance的因素 xcelium版本access rwccoverage收集snapshot过大&#xff0c;加载时间过长&#xff0c;可通过Zlib加快加快snapshot加载 编译/仿真添加选项&#xff1a; -new…

如何检查自己电脑是否被攻击了?

数据来源 本文仅用于信息安全的学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 通过系统命令排查账户安全 query user # 查看当前登录账户 lo…

21.字符串的概念,字符串的可修改性

字符串和指针 字符串的概念&#xff1a; 字符串就是以 ‘\0’ 结尾的若干字符的集合。字符串的地址&#xff0c;是第一个字符的地址。可以定义一个字符指针变量保存字符串的地址。比如&#xff1a; char* shelloworld"; 字符串的存储形式&#xff1a;数组、文字常量区、…