一文了解转发与重定向

一文了解转发与重定向

🏠个人主页:不会写代码的满满
🧑个人简介:大家好,我是满满,一个想要与大家共同进步的男人😉😉
目前状况🎉:开学即将大三,目标就是半年内找到一份实习工作👏👏
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

正文开始 ----------

先看一下思维导图了解一下大体

在这里插入图片描述

第1章 请求的转发与重定向

请求的转发与重定向是web应用页面跳转的主要手段,在Web应用中使用非常广泛。所以我们一定要搞清楚他们的区别。

1562000421414

8.1 请求的转发

1557754164834

  • 第一个Servlet接收到了浏览器端的请求,进行了一定的处理,然后没有立即对请求进行响应,而是将请求“交给下一个Servlet”继续处理,下一个Servlet处理完成之后对浏览器进行了响应。**在服务器内部将请求“交给”其它组件继续处理就是请求的转发。**对浏览器来说,一共只发了一次请求,服务器内部进行的“转发”浏览器感觉不到,同时浏览器地址栏中的地址不会变成“下一个Servlet”的虚拟路径。
  • HttpServletRequest 代表HTTP请求,对象由Servlet容器创建。转发的情况下,两个Servlet 可以共享同一个Request对象中保存的数据。
  • 当需要将后台获取的数据传送到 JSP上显示的时候,就可以先将数据存放到Request对象中,再转发到JSP从属性域中获取。此时由于是“转发”,所以它们二者共享 Request 对象中的数据。
  • 转发的情况下,可以访问WEB-INF下的资源。
  • 转发以“/”开始表示项目根路径,重定向以”/”开始表示主机地址。
  • 功能:
    • 获取请求参数
    • 获取请求路径即URL地址相关信息
    • 在请求域中保存数据
    • 转发请求
  • 代码举例
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {//1.使用RequestDispatcher对象封装目标资源的虚拟路径RequestDispatcher dispatcher = request.getRequestDispatcher("/index.html");//2.调用RequestDispatcher对象的forward()方法“前往”目标资源//[注意:传入的参数必须是传递给当前Servlet的service方法的//那两个ServletRequest和ServletResponse对象]dispatcher.forward(request, response);
}

8.2 请求的重定向

1557754122187

  • 第一个Servlet接收到了浏览器端的请求,进行了一定的处理,然后给浏览器一个特殊的响应消息,这个特殊的响应消息会通知浏览器去访问另外一个资源,这个动作是服务器和浏览器自动完成的。整个过程中浏览器端会发出两次请求,且在浏览器地址栏里面能够看到地址的改变,改变为下一个资源的地址。

  • 重定向的情况下,原Servlet和目标资源之间就不能共享请求域数据了。

  • HttpServletResponse代表HTTP响应,对象由Servlet容器创建。

  • 功能:

    • 向浏览器输出数据
    • 重定向请求
  • 重定向的响应报文的头

    HTTP/1.1 302 Found
    Location: success.html
    
  • 应用:

    • 用户从 login.html 页面提交登录请求数据给LoginServlet处理。

      如果账号密码正确,需要让用户跳转到成功页面,通过servlet向响应体中写入成功页面过于复杂,通过重定向将成功页面的地址交给浏览器并设置响应状态码为302,浏览器会自动进行跳转

  • 代码举例:

protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {//1.调用HttpServletResponse对象的sendRedirect()方法//2.传入的参数是目标资源的虚拟路径response.sendRedirect("index.html");
}

8.3 对比请求的转发与重定向

转发重定向
浏览器感知在服务器内部完成,浏览器感知不到服务器以302状态码通知浏览器访问新地址,浏览器有感知
浏览器地址栏不改变改变
整个过程发送请求次数一次两次
执行效率效率高效率低
API(或发起者)Request对象Response对象
能否共享request对象数据
WEB-INF下的资源能访问不能访问
目标资源必须是当前web应用中的资源不局限于当前web应用

说明1:默认情况下,浏览器是不能访问服务器web-inf下的资源的,而服务器是可以访问的。

说明2:浏览器默认的绝对路径:http://localhost:8080/

​ 服务器项目的代码中的绝对路径:http://localhost:8080/项目名/

第2章 请求与响应中的字符编码设置

9.1 字符编码问题

  • 我们 web 程序在接收请求并处理过程中,如果不注意编码格式及解码格式,很容易导致中文乱码,引起这个问题的原因到底在哪里?如何解决?
  • 说到这个问题我们先来说一说字符集。
    • 什么是字符集,就是各种字符的集合,包括汉字,英文,标点符号等等。各国都有不同的文字、符号。这些文字符号的集合就叫字符集。
    • 现有的字符集ASCII、GB2312、BIG5、GB18030、Unicode、UTF-8、ISO-8859-1等
  • 这些字符集,集合了很多的字符,然而,字符要以二进制的形式存储在计算机中,我们就需要对其进行编码,将编码后的二进制存入。取出时我们就要对其解码,将二进制解码成我们之前的字符。这个时候我们就需要制定一套编码解码标准。否则就会导致出现混乱,也就是我们的乱码。

9.2 编码与解码

  • 编码:将字符转换为二进制数
汉字编码方式编码二进制
‘中’GB2312D6D01101 0110-1101 0000
‘中’UTF-164E2D0100 1110-0010 1101
‘中’UTF-8E4B8AD1110 0100- 1011 1000-1010 1101
  • 解码:将二进制数转换为字符

1110 0100-1011 1000-1010 1101 → E4B8AD → ’中’

  • 乱码:一段文本,使用A字符集编码,使用B字符集解码,就会产生乱码。所以解决乱码问题的根本方法就是统一编码和解码的字符集。

1558009252673

9.3 解决请求乱码问题

解决乱码的方法:就是统一字符编码。

1558009756944

9.3.1 GET请求

  • GET请求参数是在地址后面的。我们需要修改tomcat的配置文件。需要在server.xml文件修改Connector标签,添加URIEncoding="utf-8"属性。

1561220531242

  • 一旦配置好以后,可以解决当前工作空间中所有的GET请求的乱码问题。

9.3.2 POST请求

  • post请求提交了中文的请求体,服务器解析出现问题。

  • 解决方法:在获取参数值之前,设置请求的解码格式,使其和页面保持一致。

    request.setCharacterEncoding("utf-8");
    
  • POST请求乱码问题的解决,只适用于当前的操作所在的类中。不能类似于GET请求一样统一解决。因为请求体有可能会上传文件。不一定都是中文字符。

9.4 解决响应乱码问题

  • 向浏览器发送响应的时候,要告诉浏览器,我使用的字符集是哪个,浏览器就会按照这种方式来解码。如何告诉浏览器响应内容的字符编码方案。很简单。

  • 解决方法一:

    response.setHeader("Content-Type", "text/html;charset=utf-8");
    
  • 解决方法二

    response.setContentType("text/html;charset=utf-8");
    

    说明:有的人可能会想到使用response.setCharacterEncoding(“utf-8”),设置reponse对象将UTF-8字符串写入到响应报文的编码为UTF-8。只这样做是不行的,还必须手动在浏览器中设置浏览器的解析用到的字符集。

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

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

相关文章

转发与重定向

转发是服务器行为,重定向是客户端行为。转发耗时比重定向少。 转发——>客户浏览器发送HTTP请求——>web服务器接受请求——>调用内部一个方法在容器内部完成请求处理和转发动作——>再将转发跳转到的那个网页资源返回给客户; 转发只能在同…

将您重定向的次数过多什么意思_Linux重定向

通常说所重定向便是将命令结果如查询结果重定向到一个文件中,通常用在一些命令结果较多无法完全显示完,可以重定向到一个文件,在文件中查看。 重定向分为输入重定向<和输出重定向> 一、>和>> 区别:>是重定向到一个文件;>>追加内容到一个文件 如果…

API接口案例,淘宝商品详情数据采集

item_get-获得商品详情 API接口工具 请求参数 请求参数&#xff1a;num_iid520813250866&is_promotion1参数说明&#xff1a;num_iid:淘宝商品ID is_promotion:是否获取取促销价 Request address: https://api-gw.onebound.cn/taobao/item_get_app/?keyt& &num…

API数据接口该怎么对接

随着互联网和移动互联网的发展&#xff0c;API&#xff08;Application Programming Interface&#xff09;接口的作用越来越重要。API接口将各种平台相互连接&#xff0c;使得不同系统的信息可以互相获取和使用&#xff0c;大大提高了系统的互操作性和开发效率。本文将介绍如何…

如何实现高质量的系统数据对接/API接口整合集成方案?

我们建立一个数字化系统可能会有跟别的系统进行数据对接的需要&#xff0c;而别人的数字化系统也有可能需要跟我们的系统进行数据对接&#xff0c;也可能我们开发了不同的网站&#xff0c;网站小应用之间需要进行数据对接。那么数据对接应该如何操作呢&#xff1f;怎么才能更好…

以聚合数据为例,详细说明API接口使用方法

前言 以聚合数据为例&#xff0c;详细说明API接口使用细节方法&#xff0c;说明清楚如何使用API接口的每个步骤&#xff0c;防止以后忘记没地方找。 API网站注册后最重要的个人数据是请求key值&#xff0c;每个不同的数据都有与之对应的请求key值&#xff0c;这里我拿新…

举例说明如何使用【聚合数据】的API接口

更新&#xff1a;这篇文章写于2016年8月&#xff0c;现在的聚合数据可能有些变化&#xff0c;申请使用的方式相应有所改变&#xff0c;所以本文只作参考. ________________________________________________________________________________________________________________…

企业微信增加企业内部应用入口的超链接

背景 2020年初,新冠疫情导致很多企业远程办公,接到许多方便员工移动办公的开发需求.比如最近接到一个任务,是需要再企业微信的工作台台添加一个超链接,连接到企业已经有的一个web项目上去.并且能够携带用户信息进行访问. 放超链接很简单,复杂的是如何携带用户信息到这个超链接…

企业微信url及生成授权链接

企业微信第三方开发课程 14-18 一、简介 这里主要分为四部分&#xff0c;验证 url 有效性、完成用户的测试安装、获取生成预授权码、生成授权安装链接。这几部就可以完成第三方有用的回调和安装&#xff0c;这也是后续功能开发的基础。 二、Get 请求验证 URL 有效性 1.为什…

对接企业微信3:网页授权登录

构造网页授权链接 如果企业需要在打开的网页里面携带用户的身份信息&#xff0c;第一步需要构造如下的链接来获取code参数&#xff1a; https://open.weixin.qq.com/connect/oauth2/authorize?appidCORPID&redirect_uriREDIRECT_URI&response_typecode&scopesnsa…

企业微信-构造网页授权链接实现登录

文档地址&#xff1a;构造网页授权链接 - 接口文档 - 企业微信开发者中心 注意&#xff1a; 1.redirect_uri&#xff1a;回调链接地址&#xff0c;需要使用urlencode对链接进行处理 2.scope&#xff1a;如果需要获取成员的头像、手机号等信息需要设为snsapi_privateinfo 例如前…

windows浏览器无法访问虚拟机上Linux部署的consul

一、问题&#xff1a; 查看consul服务 是启动的&#xff0c;但是就是无法访问。 二、解决步骤&#xff1a; 1、查看防火墙是否关闭或者添加接口映射 关闭防火墙&#xff08;具体看应用场景&#xff0c;请不要盲目的操作&#xff09; systemctl stop firewalld 查看防火墙状…

插件部署环境

插件部署环境 前言 按照前面的文章已经安装好了同步工具&#xff0c;那么在使用之前&#xff0c;我们需要为同步工具做一些准备工作&#xff0c;插件才能正常使用 准备工作 准备工作主要两点&#xff0c;许可&#xff0c;金蝶环境配置 许可试用 插件一共提供四种许可方式…

RabbiteMQ 部署到虚拟机的 Linux 上,加入插件后,无法通过浏览器访问 RabbiteMQ 控制台

解决办法&#xff1a; 可以通过安装 docker 容器&#xff0c;在 docker 容器上面安装 RabbiteMQ 解决。 具体操作如下&#xff1a; 1.先安装 docker 安装yum工具 yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken更新本地镜像源&#xff1a; …

量化交易入门--写第一个量化程序

一位量化交易程序员手把手教你入门 上篇介绍完了如何配置量化交易所需要的环境&#xff0c;这篇继续介绍如何写第一个量化交易程序。 MT4提供的sample程序只有基本的功能&#xff0c;不能够自动交易。 我们写一个自动交易程序&#xff0c;逻辑如下 下一个多单 检查当前盈…

《PyTorch深度学习实践》

【《PyTorch深度学习实践》完结合集】 https://www.bilibili.com/video/BV1Y7411d7Ys/?share_sourcecopy_web&vd_source684aec3a42a2952834511895317ee34b 链接&#xff1a;https://pan.baidu.com/s/1vZ27gKp8Pl-qICn_p2PaSw 提取码&#xff1a;cxe4 一、&#xff08;学习…

C++_开发图形界面_EasyX(笔记)

笔记目录 前言一、为什么使用EasyX二、搭建EasyX图形开发环境三、测试EasyX图形开发环境1.绘制圆2.用ChatGpt测试EasyX的Y轴朝向 三、图形开发进阶四、黑客攻击系统界面总结 前言 Rock老师 ; C ; EasyX ; 笔记 一、为什么使用EasyX 1.辅助学习和提高C的工具 2.开发简单的图形…

吴恩达机器学习作业二Python实现

作业二 文章目录&#xff08;嫌墨迹可以直接点击目录跳转到源代码查看&#xff09; 文章目录 作业二第一题1.1 数据可视化代码讲解结果 1.2 实现1.2.1 热身运动 sigmoid 函数代码 1.2.2 损失函数和梯度代码结果思路 1.2.3 手动梯度下降尝试学习参数代码结果总结 1.2.3 使用fm…

chatgpt赋能python:Python出不来图像如何解决?——Python编程经验分享

Python出不来图像如何解决&#xff1f;——Python编程经验分享 Python是一门非常强大的编程语言&#xff0c;常用于数据处理、Web后端开发、爬虫等领域&#xff0c;但有时候在开发过程中&#xff0c;你可能会遇到Python出不来图像的情况。这时候该怎么办呢&#xff1f;本文将从…

java飞机大战程序图片不显示

作为一个java初学者&#xff0c;最近在学习尚学堂免费的基础java课程时&#xff0c;跟着视频做一个planewar/飞机大战的程序&#xff0c;遇到了背景和飞机图片加载不了的问题&#xff0c;几经搜索&#xff0c;终于解决&#xff0c;分享一下过程和解决办法&#xff1a; 代码片段…