转发和重定向区别
转发和重定向
1.0 面试提问
- 定义不同
- 跳转的方式不同
- 数据共享不同
- 最终的URL地址不同
- 代码实现不同
1. 转发
1.1 概念
转发实际上在服务器端进行页面的跳转操作,请求转发:一种在服务器内部的资源的跳转的方式。
访问A,A请求转发了B,访问A的同时就也访问到了B。
带参数跳到指定的页面,比如request。
访问A,进入A的网址,然后在A里面请求转发B,就是带着A的请求到了B。
1.2 特点
- 转发操作用户只请求了一次
- 转发操作用户请求的URL不发生改变
- 转发操作只能够转发服务器内部的资源.
- 转发操作过程中,任何一个步骤都可以获取用户的请求参数,获取之前其他操作添加的数据内容, 即请求域中的数据不会丢失。
- 转发操作是服务器行为。
1.3 方法(通过HttpServletRequest)
方法 | 含义 |
---|---|
获取参数 | |
String getParameter(String name); | 通过名称获取用户请求参数对应的数据 |
Map(String,String[]) getParameterMap(); | 直接获取用户请求参数对应的map双边队列 |
String[] getParameterValues(String names); | 通过名称获取对应的Value值 |
获取属性存储的数据 | |
void setAttribute(String name,Object obj); | request 对象添加属性的操作, 要求提供属性名称和对应的属性值 ,属性名称是String 类型,值为Object 什么类型都可以 |
Object getAttribute(String name); | 根据属性的名称获取对应的属性值,返回是Object。可使用强转。 |
void removeAttribute(String name); | 删除属性的操作,根据属性名称删除属性信息,属性名称+属性值都删除 |
区分:
Parameter : 用户提交的数据,通过表单,ajax,等方式获取,数据形式是键值对的形式。Servlet获取的数据类型是String类型。
Attribute属性:服务器在转发的过程中的操作,方便后续资源的使用,在Attribute 属性中添加属性数据,类似于Map 类型。name = value 模式,value 类型不会限制。
1.4 Request域对象特征
域对象: 表示的是一定范围内的有效的对象
有效范围: 对于HttpServletRequest 对象是整个转发路径中的所有的相关的资源范围内有效。
1.5 实例
- 首先: Servlet 接收用户的请求,转发到中间的Servlet。
- 中间的Servlet 接收其他的Servlet转发访问,同时添加访问的内容,转发到最终的处理需求的Servlet。
- 最终的Servlet 完成针对于用户的响应的请求之后,同时用户的请求的数据和中间的Servlet添加属性数据。
@WebServlet("/test1")
public class ADispatchServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 解决Servlet中的乱码的问题req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");System.out.println("首先收到指定的请求操作");System.out.println("请求中的参数1是"+ req.getParameter("user1"));System.out.println("请求中的参数2是"+ req.getParameter("user2"));/*** 执行转发的操作通过request 对象进行调用指定的方法,然后通过forword转发到目标的资源中,提供请求对象和响应对象*/req.getRequestDispatcher("test2").forward(req, resp);}
}@WebServlet("/test2")
public class BDispatchServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {/*当前 Servlet 对应的请求和响应不是 Tomcat 服务器用户请求创建和绑定的而是上一个资源,在转发过程中, 提交给当前 Servlet 程序运行所需的请求和响应对象*/System.out.println("收到test1 中的转发");System.out.println("所需要的参数一"+req.getParameter("user1"));System.out.println("所需要的参数二"+req.getParameter("user2"));// 给当前的request对象添加属性值,进行传递操作req.setAttribute("none","张三,李四");req.getRequestDispatcher("test3").forward(req, resp);}
}@WebServlet("/test3")
public class CDispatchServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("重定向");System.out.println("获取请求中的1参数;"+req.getParameter("user1"));System.out.println("获取请求中的2参数;"+req.getParameter("user2"));System.out.println("获取上一级建立的属性的参数");System.out.println(req.getAttribute("none"));resp.getWriter().append((String)req.getAttribute("none"));}
}
1.6 总结
1. 得到转发器: RequestDispatcher request.getRequestDispatcher("/跳转的地址") 参数是要跳转的地址 2. 实现转发操作转发器对象.forward(request,response)表示的含义是 将请求和响应提交过去,保证转发过去的页面也能够有同样的request 和 response。
总结
实现:request.getRequestDispatcher(“/跳转的地址”).forward(request,response);
2. 重定向
2.1 概念
重定向就是通过各种方法将各种网络请求重新定个方向转到其他的位置。也就是说在网页上设置一个约束条件,如果满足条件,就会自动跳转到其他的网页上。例如:网页重定向、域名重定向、路由的选择的变化也是重定向.
2.2 特点
- 用户请求多次(两次两次以上)
- URL会改变
- 浏览器行为
- 操作后用户无法获取请求资源和中间资源
- 可以定向至服务器内部资源,也能够访问服务器外部资源
2.3 核心
核心变量:
HttpServletResponse 对象
核心方法:
SendRedirect(String location) 完成对应的重定向的操作
response.sendRedirect("跳转的地址")
2.4 网页定向
在我们创建网站的时候,时常能够遇到网页需要重定向的情况
- 网站的调整,改变网页的目录结构
- 网页被移动到一个新的地址
- 网页拓展名称改变。
- 注册了多个域名的网站,也需要通过重定向让访问这个域名的用户自动跳转到主站点。
3. 使用区分总结
如果需要保存数据域中的数据,则需要进行转发的实现操作,否则需要使用重定向。
如果之后需要访问数据库,增删改的操作,需要使用重定向的操作,查询的时候使用转发。
区别 | 转发forward() | 重定向sendRedirect() |
---|---|---|
根目录 | 包含项目的访问地址 | 没有项目的访问地址 |
地址栏 | 不会发生改变 | 会发生变化 |
哪里跳转 | 服务端进行的跳转 | 浏览器进行的跳转 |
请求域中的数据 | 不会丢失 | 会丢失 |
相关文章:

转发和重定向区别
转发和重定向 1.0 面试提问 定义不同跳转的方式不同数据共享不同最终的URL地址不同代码实现不同 1. 转发 1.1 概念 转发实际上在服务器端进行页面的跳转操作,请求转发:一种在服务器内部的资源的跳转的方式。 访问A,A请求转发了B,…...

java面试题(持续更新)
java面试题(持续更新) java 基础 java面向对象有哪些特征 面向对象的三大特征:封装、继承、多态 封装:隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据,…...

【花雕学AI】09:发挥ChatGPT最大潜力——产生高质量内容的九种方法和建议
人工智能(AI)是当今科技领域最热门和最有前景的话题之一,它已经渗透到了我们生活和工作的方方面面,给我们带来了许多便利和惊喜。而在AI的众多分支中,自然语言处理(NLP)是最贴近人类的一个领域&…...

实战打靶集锦-013-Loly
**写在前面:**记录博主的一次打靶经历 目录1. 主机发现2. 端口扫描3. 服务枚举4. web服务探查4.1 WordPress探测4.2 使用metasploit4.3 使用wpscan4.4 阶段性回顾5. 提权5.1 弱密码提权5.2 操作系统信息枚举5.3 定时任务枚举5.4 passwd信息枚举5.5 可执行文件枚举5.…...

程序员OKR学习法
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl OKR管理法 OKR(Objectives and Key Results)管理法是一种目标管理方法,旨在通过制定明确的目标和可量化的关键结果来帮助组织、团队和个人…...

【从零开始学习 UVM】6.6、UVM 激励产生 —— UVM Virtual Sequence【重要】
文章目录 使用virtual sequencer不使用virtual sequencervirtual sequence是一个容器,用于在环境中的virtual sequencer上启动多个sequence。 这个virtual sequence通常由一个具有对真实sequencers句柄的virtual sequencers执行。 需要virtual sequence的原因是当您需要在不…...
蓝桥杯:阶乘约数
蓝桥杯:阶乘约数https://www.lanqiao.cn/problems/1020/learning/ 目录 题目描述 填空题:答案是 39001250856960000 题目分析 AC代码(Java) 暴力 线性筛 题目描述 填空题 定义阶乘 n!123⋅⋅⋅n。 请问 100! (100 的阶乘)有…...
最大数字
[蓝桥杯 2022 国 B] 最大数字 题目描述 给定一个正整数 NNN。你可以对 NNN 的任意一位数字执行任意次以下 2 种操作: 将该位数字加 111。如果该位数字已经是 999,加 111 之后变成 000。 将该位数字减 111。如果该位数字已经是 000,减 111 之后变成 99…...
【java进阶08:异常】finally关键字、自定义异常类、用户业务作业、军队武器作业
java中的异常处理机制 异常在java中以类和对象的形式存在,那么异常的继承结构是怎样的?我们可以使用UML图来描述以下继承结构 画UML图的工具:Rational Rose、starUML等 Object下有Throwable(可抛出的) Throwable下有两…...

#课程笔记# 电路与电子技术基础 课堂笔记 第6章 半导体器件的基本特性
6.1 半导体基础知识 6.1.1 本征半导体 完全纯净的、结构完整的半导体称为本征半导体。 常用的半导体材料有硅和锗,它们都是四价元素,原子最外层轨道有四个价电子。 若将纯净的半导体制成晶体,则原子形成排列整齐的点阵。 点阵是由共价键提供…...

skimage.filters.apply_hysteresis_threshold详解
本文内容均参考scipy1.9.1scipy1.9.1scipy1.9.1版本的源码,若有任何不当欢迎指出 我们截取官方注释如下: def apply_hysteresis_threshold(image, low, high):"""Apply hysteresis thresholding to image.This algorithm finds regions …...

一、基础算法5:前缀和与差分 模板题+算法模板(前缀和,子矩阵的和,差分,差分矩阵)
文章目录算法模板前缀和模板子矩阵的和模板差分模板差分矩阵模板模板题前缀和原题链接题目题解子矩阵的和原题链接题目题解差分原题链接题目题解差分矩阵原题链接题目题解算法模板 前缀和模板 S[i] a[1] a[2] ... a[i] a[l] ... a[r] S[r] - S[l - 1]子矩阵的和模板 S[i…...
Python矩阵分解之QR分解
文章目录QR和RQ分解其他函数QR和RQ分解 记AAA为方阵,P,QP, QP,Q分别为正交单位阵和上三角阵,则形如AQRAQRAQR的分解为QR分解;形如ARQARQARQ的分解为RQ分解。 在scipy.linalg中,为二者提供了相同的参数,除了待分解矩阵…...
随机森林程序
n_estimators:数值型取值 含义:森林中决策树的个数,默认是10 criterion:字符型取值 含义:采用何种方法度量分裂质量,信息熵或者基尼指数,默认是基尼指数 max_features:取值为int型, float型, string类型…...

每日一练2627——变态跳台阶快到碗里来不用加减乘除做加法三角形
文章目录变态跳台阶思路:代码:快到碗里来思路:代码:不用加减乘除做加法思路:代码:三角形思路:代码:变态跳台阶 题目链接: 思路: 这个题目很容易理解&#…...

LeetCode-146. LRU 缓存
目录LRU理论题目思路代码实现一代码实现二题目来源 146. LRU 缓存 LRU理论 LRU 是 Least Recently Used 的缩写,这种算法认为最近使用的数据是热门数据,下一次很大概率将会再次被使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓…...

#课程笔记# 电路与电子技术基础 课堂笔记 第3章 电路分析的几个定理
3.1 叠加定理 激励:电流源或电压源 响应:电流或电压 叠加定理一般用于已知激励或响应中的一种,求另一种。做法就是,每次只求一个激励作用下的响应,将其他激励置零,置零的具体做法是,电压源变…...

推迟参数设计的自适应反步控制和自适应神经网络的反步控制设计
推迟参数设计的自适应反步控制和自适应神经网络的反步控制设计 目录推迟参数设计的自适应反步控制和自适应神经网络的反步控制设计前言匹配与非匹配1. 基于自适应反步控制的非匹配条件下的系统控制器设计问题描述控制器设计小结2. 基于自适应反步控制和推迟参数设计的非匹配条件…...
spring5.1+SmartInstantiationAwareBeanPostProcessor 解决循环依赖
SmartInstantiationAwareBeanPostProcessor 解决循环依赖的过程, 例如上面的 A依赖B, B依赖A SmartInstantiationAwareBeanPostProcessor 是 Spring 中的一个接口,它扩展了 InstantiationAwareBeanPostProcessor 接口并提供了对 Bean 的实例化和属性填充的更高级的…...
apply、call与bind
共同点: 都是函数对象的一个方法,作用是改变函数执行时的上下文,即改变函数体内部this的指向 var name "lucy"; var obj {name: "martin",say: function () {console.log(this.name);} }; obj.say(); // martin&…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...