面试官的灵魂质问—什么是转发与重定向

news2024/10/6 8:36:47

文章目录

文章目录

      • 文章目录
    • @[toc]
  • 一、什么是HttpServletRequest、HttpServletReSponse?
  • 二、Servlet中HttpServletRequest[源码](https://so.csdn.net/so/search?q=源码&spm=1001.2101.3001.7020)分析
      • 获取客户端传递的参数
    • 请求转发
  • 三、Servlet中HttpServletReSponse源码分析
      • 向浏览器发送响应头:
      • 响应的状态码:
      • 重定向的底层方法:
  • 四、请你聊一聊转发与重定向
    • 转发请求与重定向的作用
    • 4.1转发请求:
      • 概念:
      • 转发的特点
      • 转发使用哪个方法?
    • 4.2什么是重定向
        • 概念:
      • 重定向的特点
      • 重定向该用那个方法
  • 重定向:
    • 4.3 疑问
    • 4.4 重定向和转发的区别

一、什么是HttpServletRequest、HttpServletReSponse?

web服务器端接收到客户端发送的Http请求后,会针对这个请求,分别创建代表请求的HttpServletRequest,一个代表响应的HTTPServletResponse;

HttpServletRequest:获取客户端的请求参数

HttpServleRespanse:响应客户端的所有信息

二、Servlet中HttpServletRequest源码分析

HttpservletRequest代表客户端的请求,用户通过Http协议访问服务器,Http请求中的所有信息会被封装到HttpservletRequest,通过HttpServletrequest中方法,可以获得客户端的所有信息。

我们进入到ServletRequest的源码中,其中封装了大量的获取请求的信息

在这里插入图片描述

获取客户端传递的参数

在这里插入图片描述

String username = req.getParameter("username");
String password = req.getParameter("password");
String[] games = req.getParameterValues("games");//接收多个参数

请求转发

request.getRequestDispatcher("index.jsp").forward(request, response);

三、Servlet中HttpServletReSponse源码分析

HttpServleRespanse:响应客户端的所有信息,进入到ServletResponse的源码中,可以看到底层代码中,封装了很多获取客户端的方法

在这里插入图片描述

向浏览器发送数据的方法:

ServletOutputStream getOutputStream() throws IOException;
PrintWriter getWriter() throws IOException;

向浏览器发送响应头:

void setCharacterEncoding(String paramString);

void setContentLength(int paramInt);

void setContentLengthLong(long paramLong);

void setContentType(String paramString);

void setDateHeader(String paramString, long paramLong);
    
void addDateHeader(String paramString, long paramLong);
    
void setHeader(String paramString1, String paramString2);
    
void addHeader(String paramString1, String paramString2);
    
void setIntHeader(String paramString, int paramInt);
    
void addIntHeader(String paramString, int paramInt);

void setStatus(int paramInt);

响应的状态码:

public static final int SC_CONTINUE = 100;
public static final int SC_SWITCHING_PROTOCOLS = 101;
public static final int SC_OK = 200;
public static final int SC_CREATED = 201;
public static final int SC_ACCEPTED = 202;
public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;
public static final int SC_NO_CONTENT = 204;
public static final int SC_RESET_CONTENT = 205;
public static final int SC_PARTIAL_CONTENT = 206;
public static final int SC_MULTIPLE_CHOICES = 300;
public static final int SC_MOVED_PERMANENTLY = 301;
public static final int SC_MOVED_TEMPORARILY = 302;
public static final int SC_FOUND = 302;
public static final int SC_SEE_OTHER = 303;
public static final int SC_NOT_MODIFIED = 304;
public static final int SC_USE_PROXY = 305;
public static final int SC_TEMPORARY_REDIRECT = 307;
public static final int SC_BAD_REQUEST = 400;
public static final int SC_UNAUTHORIZED = 401;
public static final int SC_PAYMENT_REQUIRED = 402;
public static final int SC_FORBIDDEN = 403;
public static final int SC_NOT_FOUND = 404;
public static final int SC_METHOD_NOT_ALLOWED = 405;
public static final int SC_NOT_ACCEPTABLE = 406;
public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
public static final int SC_REQUEST_TIMEOUT = 408;
public static final int SC_CONFLICT = 409;
public static final int SC_GONE = 410;
public static final int SC_LENGTH_REQUIRED = 411;
public static final int SC_PRECONDITION_FAILED = 412;
public static final int SC_REQUEST_ENTITY_TOO_LARGE = 413;
public static final int SC_REQUEST_URI_TOO_LONG = 414;
public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;
public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
public static final int SC_EXPECTATION_FAILED = 417;
public static final int SC_INTERNAL_SERVER_ERROR = 500;
public static final int SC_NOT_IMPLEMENTED = 501;
public static final int SC_BAD_GATEWAY = 502;
public static final int SC_SERVICE_UNAVAILABLE = 503;
public static final int SC_GATEWAY_TIMEOUT = 504;
public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;

重定向的底层方法:

void sendRedirect(String paramString) throws IOException;

在这里插入图片描述

四、请你聊一聊转发与重定向

在这里插入图片描述

转发请求与重定向的作用

在Servlet中实现页面的跳转有两种方式:转发重定向

4.1转发请求:

概念:

客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的student_list.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在student_list中都能取出来,因此,student_list能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。

转发的特点

  • 地址栏不发生变化,显示的是上一个页面的地址
  • 请求次数:只有1次请求
  • 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址
  • 请求域中数据不会丢失

转发使用哪个方法?

request.getRequestDispatcher("index.jsp").forward(request, response);
1

4.2什么是重定向

概念:

客户发送一个请求到服务器,服务器匹配servlet,servlet处理完之后调用了sendRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问student_list.jsp,紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求student_list.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。(服务器向浏览器发送一个302状态码以及一个location消息头,浏览器收到请求后会向再次根据重定向地址发出请求)

重定向的特点

  • 地址栏:显示新的地址
  • 请求次数:2次
  • 根目录:http://localhost:8080/ 没有项目的名字,在重定向过程中要写全地址
  • 请求域中的数据会丢失,因为是2次请求

重定向该用那个方法

response.sendRedirect("/项目名称/index.jsp");
1

重定向:

在这里插入图片描述

4.3 疑问

问:什么时候使用转发,什么时候使用重定向?

  • 如果要保留请求域中的数据,使用转发,否则使用重定向。以后访问数据库,增删改使用重定向,查询使用转发。

问:转发或重定向后续的代码是否还会运行?

  • 无论转发或重定向后续的代码都会执行

4.4 重定向和转发的区别

区别转发forward()重定向sendRedirect()
根目录包含项目访问地址没有项目访问地址
地址栏不会发生变化会发生变化
哪里跳转服务器端进行的跳转浏览器端进行的跳转
请求域中数据不会丢失会丢失

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

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

相关文章

HTML网页设计结课作业——基于HTML+CSS仿学校官网页面

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【保姆级】新机器部署Nacos

1、登录服务器,如果非root用户则切root用户 sudo su - 2、在/usr/tmp目录上传nacos安装包 3、将安装包移到/usr/local/目录 mv nacos-server-2.0.3.tar.gz /usr/local/ 4、解压 tar -zxvf nacos-server-2.0.3.tar.gz 5、创建nacos数据库,执行官网SQL建…

vc中调用matlab生成的动态库

开发环境: vs2010 matlab r2016a 步骤一:matlab中生成动态库 创建文本文件 D:\matlabTest\myadd.m,文件内容参看下面代码部分。注意:如果把myadd.m文件直接放在d盘根目录下,matlab中编译生成动态库时,会…

JavaScript--跟随pink老师视频学习版 (2022)

JavaScript一、JavaScript简介1.什么是JavaScript2.JavaScript用途3.浏览器执行JavaScript简介3.JavaScript组成1.ECMAScript2.DOM3.BOM4.JavaScript代码位置1.行内2.内嵌3.外部引入5.JavaScript输入输出语句二、JavaScript变量1.什么是变量2.变量使用3.变量命名规范三、数据类…

DBCO-NH2,DBCO-Amine 实验室 杂氮二苯并环辛炔-胺 1255942-06-3

DBCO(二苯并环辛炔) 的羧基和琥珀酰亚胺酯衍生物,可与带有胺基的生化小分子形成稳定的酰胺键连接。 胺官能团的环辛炔衍生物。环辛炔可用于菌株促进的无铜叠氮化物-炔烃环加成反应。该二苯并环辛炔可在不需要Cu(I)催化剂的情况下&#xff0c…

TCP/IP网络编程(10) IO函数

在Linux下,一般使用read & write函数完成数据IO,因为Linux下的套接字,可视为文件,其操作方式与文件类似,当套接字分配之后,会为其分配对应的文件描述符。在Windows下,则需要使用recv & …

[oeasy]python0016_编码_encode_编号_字节_计算机

编码(encode) 回忆上次内容 上次找到了字符和字节状态之间的映射对应关系 字符对应着二进制字节二进制字节也对应着字符 这种字节状态是用2位16进制数来表示的hex(n)可以把数字转化为 ​​16进制​​字符串 hexadecimal bin(n)可以把数字转化为 ​​2进制​​字符串 integer …

显示控件——AV输入显示

通过修改变量地址打开或者关闭AV显示,需要硬件支持。 位置信息:控件在工程页面区域的位置 “X”“Y”为控件区域左上角坐标。 “W”“H”为控件区域宽度和高度,单位为像素点。 名称:默认为AVInputView,可以重新设置。 叙述指针…

生产制造管理系统对中小型企业的作用有哪些?

随着企业数字化转型的概念深入人心,传统生产制造企业也渐渐重视起来了。对于资金雄厚的大型生产制造企业而言,企业数字化转型还是比较可以快速适用并且付出行动。而对于很多的中小型企业而言,对于企业数字化转型则没那么重视,甚至…

Beam failure Recovery

微信同步更新欢迎关注同名modem协议笔记 这篇来看BFR 过程,这里把38.300中对于BFD和BFR流程的描述再贴一遍。 BFD 发生在Pcell时: UE 通过在Pcell上进行RA 过程来触发BFR;UE 要选择suitable beam去进行BFR(如果gNB 配置了某些beams 的dedica…

NodeJs实战-待办列表(2)-待办列表增删

NodeJs实战-待办列表-增删改查项目结构增加表单提交事件修改 index.htmlNodeJS 服务端增删改查修改 server.js效果图初始页面输入 1111&#xff0c;点击添加输入 1111 点击完成项目结构 增加表单提交事件 修改 index.html 引入 jquery <script type"text/javascript…

对抗生成网络GAN系列——f-AnoGAN原理及缺陷检测实战

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

[iOS- Mac终端上传Git and 生成Token]

前言 我先写了如何上传的每一步&#xff0c;都有截图&#xff0c;在文章的后面写了出现的问题&#xff0c;即网上找到的解决方法&#xff01;&#xff01;&#xff01;谨以此篇博客纪念我忙了一个晚上的麻烦 累死个人 首先要配置好git 这里不多说了Mac上传Git 搞了我一下午晚…

异常检测 | MATLAB实现基于支持向量机和孤立森林的数据异常检测(结合t-SNE降维和DBSCAN聚类)

异常检测 | MATLAB实现基于支持向量机和孤立森林的数据异常检测(结合t-SNE降维和DBSCAN聚类) 目录 异常检测 | MATLAB实现基于支持向量机和孤立森林的数据异常检测(结合t-SNE降维和DBSCAN聚类)效果一览基本介绍模型准备模型设计参考资料效果一览 基本介绍 提取有用的特征,机器…

遨博机械臂——ROS通讯机制

文章目录知识目标1. 遨博机械臂SDK二次开发接口2. 机械臂MoveIt!低级控制器配置3. aubo ROS中间件通讯机制知识目标 学习遨博机械臂SDK开发常用接口&#xff1b;学习MoveIt!功能包中机械臂控制器的配置通用流程&#xff1b;学习遨博ROS驱动与底层SDK与上层move_group之间的通讯…

记录一次成功的frida编译

长期接手python外包和爬虫&#xff0c;私聊哦 文章目录前言一、Frida是什么&#xff1f;二、Frida一些资源相关三、Frida源码编译准备1.安装包准备2.环境变量配置四、开始编译源码结束前言 某社交平台X信的风控越发恶心&#xff0c;目前面临项目被砍的风险&#xff0c;做了n多…

学生HTML个人网页作业作品----(画家企业8页)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&#…

ScanContext 论文详解 - 用途:Lidar SLAM 回环检测、空间描述符

深蓝学院&#xff08;深蓝学院 - 专注人工智能与自动驾驶的学习平台&#xff09;是专注于人工智能的在线教育平台&#xff0c;已有数万名伙伴在深蓝学院平台学习&#xff0c;很多都来自于国内外知名院校&#xff0c;比如清华、北大等。​ 来源&#xff1a; “深蓝前沿教育” …

汽车以太网线束测试及如何破局

今日&#xff0c;AEM联合维信仪器在深圳国际会展中心参加了第二十四届中国国际高新技术成果交易会https://baike.baidu.com/item/%E7%AC%AC%E4%BA%8C%E5%8D%81%E5%9B%9B%E5%B1%8A%E4%B8%AD%E5%9B%BD%E5%9B%BD%E9%99%85%E9%AB%98%E6%96%B0%E6%8A%80%E6%9C%AF%E6%88%90%E6%9E%9C%…

【自然语言处理(NLP)】基于注意力机制的中-英机器翻译

【自然语言处理&#xff08;NLP&#xff09;】基于注意力机制的中-英机器翻译 作者简介&#xff1a;在校大学生一枚&#xff0c;华为云享专家&#xff0c;阿里云专家博主&#xff0c;腾云先锋&#xff08;TDP&#xff09;成员&#xff0c;云曦智划项目总负责人&#xff0c;全国…