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

Web中的转发与重定向

转发与重定向

  • 一、转发和重定向的概念
    • 1.转发
    • 2.重定向
  • 二、JavaWeb 中的转发和重定向
  • 三、SpringMVC 中的转发和重定向
    • 1.转发
      • (1) 默认的方式
      • (2) 完整的方式
    • 2.重定向
  • 四、总结


一、转发和重定向的概念

  • 在 Web 应用中,转发和重定向都是用于将请求从一个页面传递到另一个页面的操作(资源跳转),它们的主要区别在于传递的方式不同。

1.转发

  • 转发(Forward) 是指将请求从一个 Servlet 转发到另一个 Servlet、JSP 或 HTML 页面。在转发的过程中,请求对象和响应对象都会被传递给下一个 Servlet 或页面,而客户端并不知道这个过程。也就是说,转发是在服务器端完成的,客户端并不知道。
    • 转发(浏览器发送了一次请求)
      • 在浏览器地址栏上发送的请求是:http://localhost:8080/servletA ,最终请求结束之后,浏览器地址栏上的地址还是这个。没变。
    • 转发会存在浏览器的刷新问题。

在这里插入图片描述

2.重定向

  • 重定向(Redirect)是指将请求从一个页面重定向到另一个页面。在重定向的过程中,服务器会发送一个特殊的响应给客户端,这个响应会告诉客户端请求的地址已经发生了变化,需要重新发起请求。客户端会根据这个响应重新发起请求,并直接访问新的地址。也就是说,重定向是在客户端完成的,客户端完成的这个过程。
    • 重定向(浏览器发送了两次请求)
      • 在浏览器地址栏上发送的请求是:http://localhost:8080/servletA,最终在浏览器地址栏上显示的地址是:http://localhost:8080/servletB。

在这里插入图片描述


二、JavaWeb 中的转发和重定向

  • 转发
    • 由于是在项目内部中进行跳转,所以转发的时候路径上不需要写项目名。
    // 获取请求转发器对象
    RequestDispatcher dispatcher = request.getRequestDispatcher("/target.jsp");
    // 调用请求转发器对象的forward方法完成转发
    dispatcher.forward(request, response);// 合并一行代码
    request.getRequestDispatcher("/target.jsp").forward(request, response);
    // 转发的时候是一次请求,不管你转发了多少次。都是一次请求。
    // AServlet转发到BServlet,再转发到CServlet,再转发到DServlet,不管转发了多少次,都在同一个request当中。
    // 这是因为调用forward方法的时候,会将当前的request和response对象传递给下一个Servlet。
    
    在这里插入图片描述
  • 重定向
    • 注意:路径上要加一个项目名,因为浏览器发送请求,请求路径上是需要添加项目名的。
    • 重定向不可以访问WEN-INF下的文件,在WEB-INF下的目录是不可以直接方法,是被保护的。
    // 以下这一行代码会将请求路径“/crm/ServletA”发送给浏览器
    // 浏览器会自发的向服务器发送一次全新的请求:http://localhost:8080/crm/ServletAresponse.sendRedirect(request.getContextPath() + "/target.jsp");
    
    在这里插入图片描述

三、SpringMVC 中的转发和重定向

  • 在 SpringMVC 中默认的就是转发,在我们使用 ModelAndView 或者是直接 return 字符串时,其实就是默认走的转发。

1.转发

  • 我们如果使用默认的方式进行转发的话,我们的路径是会去拼接视图解析器的前缀和后缀。
  • 如果我们选择显式的完整的去进行使用转发,那么这时候视图解析器就不起作用了,我们需要在 forward: 后面添加完整的路径。
    • 这样做其实是可以让我们可以去访问其他目录下的一些文件,避免了视图解析器只能访问前缀的指定目录 。

(1) 默认的方式

@GetMapping("/ServletA")
public String ServletA(){// 默认的情况会去帮助我们去拼接视图解析器,我们只需要返回文件名return "target";
}

(2) 完整的方式

@GetMapping("/ServletA")
public String ServletA(){// 我们这里把forward写出来以后,视图解析器就不会去拼接了,我们需要直接去写完整的路径return "forward:/templates/target.jsp";
}

2.重定向

  • 使用重定向其实和上面转发的完整方式是一样的,这时候需要我们显式的把 redirect: 写出来。
  • 当我们使用这种方式来进行重定向时,和上面完整的转发方式一样,需要把完整的路径写出来,这时的视图解析器也是不会去拼接前缀和后缀。
  • 重定向不可以访问WEN-INF下的文件,在WEB-INF下的目录是不可以直接方法,是被保护的。
@GetMapping("/ServletA")
public String ServletA(){// 和使用forward一样,需要把完整的路径写出来return "redirect:/templates/target.jsp";
}

四、总结

  • 转发和重定向应该如何选择?什么时候使用转发,什么时候使用重定向?
    • 如果在上一个 Servlet 当中向 request 域当中绑定了数据,希望从下一个 Servlet 当中把 request 域里面的数据取出来,使用转发机制。
    • 剩下所有的请求均使用重定向。(重定向使用较多。)

相关文章:

Web中的转发与重定向

转发与重定向 一、转发和重定向的概念1.转发2.重定向 二、JavaWeb 中的转发和重定向三、SpringMVC 中的转发和重定向1.转发(1) 默认的方式(2) 完整的方式 2.重定向 四、总结 一、转发和重定向的概念 在 Web 应用中,转发和重定向都是用于将请求从一个页面传递到另一…...

交叉注意力融合时域、频域特征的FFT + CNN-Transformer-CrossAttention轴承故障识别模型

目录 往期精彩内容: 前言 1 快速傅里叶变换FFT原理介绍 第一步,导入部分数据 第二步,故障信号可视化 第三步,故障信号经过FFT可视化 2 轴承故障数据的预处理 2.1 导入数据 2.2 制作数据集和对应标签 3 交叉注意力机制 …...

STM32读取MPU6050数据并通过角度值控制舵机运动(STM32、GY-521 MPU6050、SG90舵机、MG946舵机)

通过STM32F103C8T6读取MPU6050数据控制舵机运动(STM32、GY-521 MPU6050、SG90舵机、MG946舵机) 最终现象一、MPU6050数据读取二、舵机控制原理①什么是PWM?②STM32F103C8T6如何生成PWM?③控制舵机需要什么样的PWM波? 三…...

Unity_Playable工具使用

Unity_Playable工具使用 目录 Unity_Playable工具使用 1. Default Playables(Timeline扩展) 2. PlayableGraph Visualizer&#x...

Flutter canvas 画一条波浪线 进度条

之前用 Flutter Canvas 画过一个三角三角形,html 的 Canvas 也画过一次类似的, 今天用 Flutter Canvas 试了下 感觉差不多: html 版本 大致效果如下: 思路和 html 实现的类似: 也就是找出点的位置,使用二阶…...

Java技术栈 —— Spring MVC 与 Spring Boot

参考文章或视频链接[1] Spring vs. Spring Boot vs. Spring MVC[2] Key Differences Between Spring vs Spring Boot vs Spring MVC...

跟着cherno手搓游戏引擎【16】Camera和Uniform变量的封装

相机封装&#xff1a; OrthographicCamera.h: #pragma once #include <glm/glm.hpp> namespace YOTO {class OrthographicCamera{public:OrthographicCamera(float left,float right , float bottom,float top);const glm::vec3& GetPosition()const { return m_Pos…...

微服务中间件 RabbitMq学习

1、为什么需要Mq 例如在用户注册业务中&#xff0c;用户注册成功后 需要发注册邮件和注册短信&#xff0c;传统的做法有两种 1.串行的方式&#xff1b;2.并行的方式 &#xff1b; 假设三个业务节点分别使用50ms&#xff0c;串行方式使用时间150ms&#xff0c;并行使用时间10…...

3D Gaussian Splatting-实时辐射场渲染技术

引用自&#xff1a;https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_high.pdf 概述&#xff1a; 该论文介绍了一种用于实时辐射场渲染的3D高斯点渲染技术。 其基本原理是&#xff1a; 一&#xff1a;首先从SfM校准的图像及其对应的稀疏点云…...

vue中nextTick()

在 Vue.js 中&#xff0c;nextTick() 是一个非常有用的方法&#xff0c;用于在下一个 DOM 更新循环结束后执行延迟回调。这在你需要读取或写入刚刚更新的 DOM 时非常有用。 下面是一个简单的示例代码&#xff0c;用于解析 nextTick() 的用法&#xff1a; <template> &…...

Redis 布隆过滤器

布隆过滤器 这一篇文章主要是记录布隆过滤器的使用和认识 主要参考了如下的blog https://blog.csdn.net/weixin_42972832/article/details/131211665 他讲的还不错 简单的来说,布隆过滤器,实际上就像是一个集合,拿redis的key来举例来说,布隆过滤器的设置就是去过滤不属于redi…...

中国的茶文化:现代生活中的茶文化

中国的茶文化&#xff1a;现代生活中的茶文化 引言 在现代社会的快节奏生活中&#xff0c;茶文化并未随时间流逝而褪色&#xff0c;反而以其独特的方式融入了全球各地人们的日常生活。它超越了饮品本身的范畴&#xff0c;成为一种连接历史、人文与现代生活方式的艺术形式。本文…...

Python正则表达式语法

正则表达式是一种强大的文本处理工具&#xff0c;它可以用来搜索、匹配和替换特定的字符模式。在Python中&#xff0c;正则表达式常常被用于处理字符串数据&#xff0c;例如文本搜索、数据提取、格式验证等任务。本文将深入介绍Python中正则表达式的语法&#xff0c;帮助读者全…...

C++核心编程:文件操作 笔记

5.文件操作 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦允许结束都会被释放。通过文件可以将数据持久化 C中对文件操作需要包含头文件<fstream> 文件类型分为两种&#xff1a; 文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文件以文本…...

ElementUI组件:Button 按钮

ElementUI安装与使用指南 Button按钮 点击下载learnelementuispringboot项目源码 效果图 el-button.vue页面效果图 项目里el-button.vue代码 <script> export default {name: "el_button",// 注意这里的名称不能和 router inex.js里的name一样methods: {s…...

#RAG|NLP|Jieba|PDF2WORD# pdf转word-换行问题

文档在生成PDF时,文宁都发生了什么。本文讲解了配置对象、resources对象和content对象的作用,以及字体、宇号、坐标、文本摆放等过程。同时,还解释了为什么PDF转word或转文字都是一行一行的以及为什么页眉页脚的问题会加大识别难度。最后提到了文本的编码和PDF中缺少文档结构标…...

solr的原理是什么

1 Java程序里如果有无限for循环的代码导致CPU负载超高&#xff0c;如何排查&#xff1f; 排查Java程序中由于无限循环导致的CPU负载过高的问题&#xff0c;可以按照以下步骤进行&#xff1a; 资源监控&#xff1a; 使用系统命令行工具&#xff08;如Linux上的top或htop&#xf…...

【安装指南】nodejs下载、安装与配置详细教程

目录 &#x1f33c;一、概述 &#x1f340;二、下载node.js &#x1f337;三、安装node.js &#x1f341;四、配置node.js &#x1f33c;一、概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;用于构建可扩展的网络应用程序。Node.js 使用事件驱动、…...

Mobileye CES 2024 自动驾驶新技术新方向

Mobileye亮相2024年国际消费类电子产品展览会推出什么自动驾驶新技术? Mobileye再次亮相CES,展示了我们的最新技术,并推出了Mobileye DXP--我们全新的驾驶体验平台。 与往年一样,Mobileye是拉斯维加斯展会现场的一大亮点,让参观者有机会见证我们对自主未来的愿景。 在…...

【Linux】网络基本配置及网络测试、测试工具

一、网络基本配置 查看网络信息&#xff1a; ifconfigc / ip addr停止网卡eth0&#xff1a; ifconfig eth0 down在本地启动网卡eth0&#xff1a; ifconfig eth0 up改变网卡ip&#xff1a; ifconfig eth0 192.168. .修改子网掩码&#xff1a; ifconfig eth0 &#xff08;I…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...