转发和重定向区别
转发和重定向
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&…...

《Effective Objective-C 2.0 》 阅读笔记 item3
第3条:多用字面量语法,少用与之等价的方法 1. 字面数值 使用字面量能令代码更为简洁: NSNumber *someNumber 1; *** 字面量语法的好处! *** 令代码更为简洁。能够以NSNumber实例表示的所有数据类型(int、float、d…...

SSL/TLS 证书管理
SSL 证书发现 随着组织的 IT 基础架构的扩展,他们为每台计算机获取证书以保护其资源和域。此外,开发人员通常会创建许多自签名证书,以便在产品的开发阶段保护内部网络。组织通常最终会拥有数千个证书。自动发现证书提供了对证书基础结构的完…...

supersqli(SQL注入流程及常用SQL语句)
目录 一、SQL注入知识学习 1、判断注入类型 (1)数字型注入判断 (2)字符型注入判断 2、猜解sql查询语句中的字段数(order by 的使用) 3、判断显示位爆数据库的名字 4、注释(--的使用&#…...

【数据结构】用Java实现一棵二叉树
目录 前言 1. 创建MyBinaryTree类 2. 从前序与中序遍历序列构造二叉树 3. 从中序与后序遍历序列构造二叉树 4. 用层序遍历验证二叉树是否构建成功 5. 整体代码(构建二叉树、二叉树的基本功能和测试代码) 6. 测试结果 前言 前面两篇文章已经给出了…...

【面试】面试官问的几率较大的网络安全面试题
文章目录防范常见的 Web 攻击1、什么是SQL注入攻击2、什么是XSS攻击3、什么是CSRF攻击4、什么是文件上传漏洞5、DDos 攻击重要协议分布图1、arp协议的工作原理ARP协议工作原理:2、什么是RARP?工作原理3、dns是什么?dns的工作原理4、rip协议是…...

[Python] 循环语句
循环语句就是在符合条件的情况下,重复执行一个代码段 1.while循环 while语句可用于在条件为真时反复执行代码块 语法格式 while 条件语句:执行语句 当条件语句为真(True)时,就会执行while循环下的语句 示例 实现1到100 的累加并输出求和结果 …...

计算机网络考试复习——第一章 1.5 1.6
1.5 计算机网络的类别 1.5.1计算机网络的定义: 系统集合,连接起来,协议工作,资源共享 计算机网络主要是由一些通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的(例如࿰…...

3.29 最小生成树算法
最小生成树概念 参考:什么是最小生成树? Minimum Spanning Tree 何为生成树? 生成树是指一个联通图的极小的连通子图,它包含了图中的所有n个顶点,并只有n-1条边(构成一棵树) 生成树的一些性…...

计算机科班与培训开发编程的区别在哪里?
科班、培训班、科班培训班的模式都培养了很多编程技术人员进入IT行业,有的成为某个技术领域的专家,有的成为领导层,有的一直在默默无闻的敲代码等待35岁的到来。不管那种方式入行,这些类似的情况都存在,并且未来还会一…...

idea设置常用自设置快捷键及坐标
<!--mybatis 依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency…...