Request请求转发与Respones请求重定向有什么区别?

简介: Request请求转发与Respones请求重定向有什么区别?

e7c5d15a12804a9599e45690e2aeac44.png


 


1.Request请求转发

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

(1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求

(2)资源A处理完请求后将请求发给资源B

(3)资源B处理完后将结果响应给浏览器

(4)请求从资源A到资源B的过程就叫请求转发

请求转发的实现方式

req.getRequestDispatcher("资源B路径").forward(request,response);

请求转发可以在多个资源间共享数据:使用Request对象

共享数据的实现方式:

资源A中:

//存储数据

request.setAttribute("message","hello world");

//请求转发

request.getRequestDispatcher("/req6").forward(request,response);

资源B中:

//获取数据

Object message = request.getAttribute("message");

//处理数据

System.out.println(message);

请求转发的特点

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

只能转发到当前服务器的内部资源不能从一个服务器通过转发访问另一台服务器

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


2.Respones请求重定向

Response重定向(redirect)就是一种资源跳转方式。

(1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求

(2)资源A现在无法处理该请求,就会给浏览器响应一个302的状态码+location的一个访问资源B的路径


(3)浏览器接收到响应状态码为302就会重新发送请求到location对应的访问地址去访问资源B


(4)资源B接收到请求后进行处理并最终给浏览器响应结果,这整个过程就叫重定向

重定向的实现方式:

resp.setStatus(302);
resp.setHeader("location","资源B的访问路径")
//或者
resposne.sendRedirect("资源B的访问路径")


重定向的特点

浏览器地址栏路径发送变化。


当进行重定向访问的时候,由于是由浏览器发送的两次请求,所以地址会发生变化 。


可以重定向到任何位置的资源(服务内容、外部均可),因为第一次响应结果中包含了浏览器下次要跳转的路径,所以这个路径是可以任意位置资源。


有两次请求,不能在多个资源使用request共享数据,因为浏览器发送了两次请求,是两个不同的request对象,就无法通过request对象进行共享数据。



3.关于转发和重定向的路径问题

判断的规则:

浏览器使用:需要加项目访问的具体路径,即绝对路径

服务端使用:不需要加具体路径,即相对路径

对于转发来说,因为是在服务端进行的,所以不需要绝对路径。

对于重定向来说,路径最终是由浏览器来发送请求,就需要添加绝对路径。

延伸:

1.超链接,从浏览器发送,需要加绝对路径

2.表单,从浏览器发送,需要加绝对路径

3.转发,是从服务器内部跳转,不需要加绝对路径

4.重定向,是由浏览器进行跳转,需要加绝对路径


相关文章
|
Web App开发 数据可视化 前端开发
测试篇:性能监测之Performance、LightHouse 与性能 API
测试篇:性能监测之Performance、LightHouse 与性能 API
测试篇:性能监测之Performance、LightHouse 与性能 API
|
IDE Java 开发工具
@Builder这个注解的作用
@Builder这个注解的作用
520 0
|
Prometheus 监控 Cloud Native
【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目JVM信息
Prometheus+Grafana监控SpringBoot项目JVM信息 1. SpringBoot项目配置JVM采集 2. Prometheus配置 3. 配置grafana 4. 扩展-通过JMX Exporter监控JVM信息
【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目JVM信息
|
JSON JavaScript API
【开源打印组件】vue-plugin-hiprint初体验
本文介绍对vue-plugin-hiprint部分重要代码的解析,这是一个很好的开源插件,能够自己自定义打印模板,通过后端传来的数据进行渲染打印,官方也提供了许多的api供开发者使用。界面采用了antdesign。实现了免预览的直接打印。
3951 1
【开源打印组件】vue-plugin-hiprint初体验
|
监控 Java
注册并配置ARMS实例
【8月更文挑战第24天】
241 4
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
495 2
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
前端开发 JavaScript
判断数组为空的方法有哪些?
本文介绍了多种判断数组是否为空的方法,包括使用 `length` 属性、隐式类型转换、`toString()`、`join()`、`every()`、`reduce()`、`filter()`、`some()` 方法以及循环。每种方法都有其适用场景,其中使用 `length` 属性和隐式类型转换最为常见和简单。文章首发于微信公众号“前端徐徐”。
818 2
判断数组为空的方法有哪些?
|
存储 安全 JavaScript
文件上传漏洞(一)一句话木ma
文件上传漏洞(一)一句话木ma
|
Cloud Native IDE Java
阿里云spring脚手架如何接入
阿里云spring脚手架如何接入
1126 2
|
存储 缓存 前端开发
Request 和 Response详解(中)
Request 和 Response详解(中)
253 0