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 域里面的数据取出来,使用转发机制。
    • 剩下所有的请求均使用重定向。(重定向使用较多。)

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

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

相关文章

09-信息收集-APP及其他资产等

信息收集-APP及其他资产等 信息收集-APP及其他资产等一、APP提取季抓包及后续配合1、某APK一键提取反编译2、利用bp抓取更多URL 二、某IP无web框架下的第三方测试1、各种端口一顿乱扫 —— 思路2、各种接口一顿乱扫 —— 思路3、接口部分一顿测试 —— 思路 三、**案例演示**1、…

【Redis笔记】缓存——缓存分类、更新策略、缓存穿透、缓存雪崩、缓存击穿

缓存 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于高速存储媒介上。 缓存的本质就是用空间换时间,牺牲数据的实时性,以服务器内存中的数据暂时代替从数据库读取最新的数据,减少数据库IO&#…

民事二审案件庭审应如何准备?

一、你要明确审理范围,固定上诉请求 首先,第二审人民法院围绕当事人的上诉请求进行审理。 其次,在第二审程序中,原审原告增加独立的诉讼请求或者原审被告提出反诉的,第二审人民法院可以根据当事人自愿的原则就新增加的…

技术革新与市场需求:探索亚信安慧AntDB的发展之路

在这个信息爆炸的时代,企业对数据处理的需求日益增长,而传统的数据库系统往往难以应对海量数据的存储和处理。亚信安慧AntDB的出现,为解决这一难题提供了有力的工具。它不仅具备高吞吐、高并发、高性能的特点,还拥有极佳的扩展性和…

HTML+JavaScript-05

DOM 什么是 DOM? DOM 是一项 W3C (World Wide Web Consortium) 标准。 DOM 定义了访问文档的标准: “W3C 文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问、更新文档的内容、结构和样式。”…

AI绘画探索人工智能的未来

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-8fL64RHWVzwpzR6m {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

SouthLeetCode-打卡24年01月第5周

SouthLeetCode-打卡24年01月第5周 // Date : 2024/01/39 ~ 2024/01/31 031.删除链表的倒数第 N 个结点 (1) 题目描述 031#LeetCode.19.#北岸计划2024/01/29 (2) 题解代码 Version1.0 class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {if(head …

【知识图谱--第一讲概论】

深度学习–连接主义 知识图谱–符号主义 表示 有属性图和RDF图两种 RDF由三元组表示:Subject - Predicate - Object 存储 图数据库 抽取 融合 推理 问答 图算法

Seata下载与配置、启动

目录 Seata下载Seata配置启动Seata Seata下载 首先,我们需要知道我们要使用哪个版本的seata,这就要查看spring-cloud-alibaba版本说明,找到我们对应的seata。 spring-cloud-alibaba版本说明: 地址链接 下面是部分版本说明: s…

【MyBatis】MyBatis是什么?作用?怎么实现?

一、MyBatis是什么 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain …

【Java】小白友好的JDBC基础学习笔记

目录 JDBC简介 JDBC使用基本步骤 DriverManager Connection Statement PreparedStatement ResultSet JDBC简介 JDBC(Java Database Connectivity)是 Java 提供的一种用于与关系型数据库进行交互的 API(应用程序接口)。它允…

感染了后缀为.pings勒索病毒如何应对?数据能够恢复吗?

导言: 近期,一种名为.pings的勒索病毒悄然出现,给用户的数据安全带来了极大的威胁。该病毒以强力的加密手段对用户文件进行锁定,并勒索赎金。在本文中,91数据恢复将深入介绍.pings勒索病毒的特点,提供被感…

代码随想录二刷——字符串day9

文章目录 前言字符串知识点 一、 28. 找出字符串中第一个匹配项的下标二、459. 重复的子字符串总结 前言 一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油! 二刷决定精刷了,于是参加了卡子哥的刷…

虚拟机扩容后黑屏卡死解决方法

亲测有效,首先一般是在扩容后黑屏的,现象为开机后看到个横线光标不闪,黑屏,进入不了桌面。原因是硬盘已经满了,所以解决方法就是清理硬盘。所以首先还是要解决登录问题。 开机时按 esc 键进入 GNU GRUB,选择…

详解SpringCloud微服务技术栈:深入ElasticSearch(4)——ES集群

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:详解SpringCloud微服务技术栈:深入ElasticSearch(3)——数据同步(酒店管理项目&a…

新火种AI|GPT Store可能是一个“硅基人才市场”

作者:一号 编辑:美美 也许我们都错了,GPT Store可能是一个“硅基人才市场”,而不是APP Store。 如果要说在AI领域中最火的一个应用,那么在当下,毫无疑问会是ChatGPT。 2023年,全球前50的AI工…

IT行业中最重要的证书

在IT行业,拥有一些含金量较高的证书是职业发展的关键。这些证书不仅可以证明技能水平,还有助于提升在职场上的竞争力。本文将介绍几个IT行业中最重要的证书。 1. Cisco认证 CCNA(Cisco Certified Network Associate)是Cisco公司新…

LeetCode: 189.轮转数组

本篇目标了解,翻转数组的经典解法, 189. 轮转数组 - 力扣(LeetCode) 目录 基本方法概述: 1,翻转做法,推荐时O(n),空(1) 2&#x…

J-Link:STM32使用J-LINK烧录程序,其他MCU也通用

说明:本文记录使用J-LINK烧录STM32程序的过程。 1. J-LINK驱动、软件下载 1、首先拥有硬件J-Link烧录器。 2、安装J-Link驱动程序SEGGER 下载地址如下 https://www.segger.com 直接下载就可以了。 2.如何使用J-LINK向STM32烧写程序 1、安装好以后打开J-LINK Fl…

软件测试基础总结

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 前言 提示:本文旨在帮助小白对软件测试有个基础的入…