重定向(重要)!!

简介: 重定向(重要)!!

重定向解决方案

1.工作原理

假设此时OneServlet是用户第一次访问的内部资源地址,TwoServlet是重定向访问的地址,下面来介绍一下过程:


用户第一次通过【手动方式】通知浏览器访问OneServlet。OneServlet工作完毕后,将TwoServlet地址写入到http响应协议包中的响应头中的location属性中,同时Tomcat也将302状态码写入到状态行(状态行在http响应协议包中),302代表通知浏览器本次返回的不是一个资源文件内容,而是一个资源文件地址,需要浏览器根据这个请求来索要这个资源文件。


在浏览器接收到响应包之后,会读取到302状态。此时浏览器自动根据响应头中location属性地址发起第二次请求,访问TwoServlet去完成请求中剩余任务


2.实现方式

response.sendRedirect("请求地址")


3.特征

(1)请求地址

既可以把当前网站内部的资源文件地址发送给浏览器 (格式:/网站名/资源文件名),也可以把其他网站资源文件地址发送给浏览器(格式:http://ip地址:端口号/网站名/资源文件名)


下面来看下代码示例:

情况一:我们想将当前网站内部的资源文件地址发送给浏览器:此时运用重定向方法可以实现,注意myweb是我们发布项目时的名称,two为访问TwoServlet时我们所设置的请求别名。

public class OneServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("/myweb/two");
    }
}

此时我们是想告诉浏览器第二次自动访问我们的TwoServlet,因为是通过地址栏通知浏览器发起下一次请求,因此通过重定向解决方案调用的资源文件接收的请求方式一定是【GET】


流程图:


2.png


情况二:


访问某个其他网站资源文件地址,例如此时我们访问的是百度,下面请看代码示例:

public class OneServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("http://www.baidu.com");
    }
}

当浏览器从http响应协议包中的响应头中的location属性获取到我们的百度地址后,便自动向我们的百度发起二次请求。


(2)请求次数

浏览器至少发送两次请求,但是只有第一次请求是用户手动发送。后续请求都是浏览器自动发送的。


(3) 请求方式

重定向解决方案中,通过地址栏通知浏览器发起下一次请求,因此通过重定向解决方案调用的资源文件接收的请求方式一定是【GET】,因为如果没有指明请求方式的话,浏览器默认的请求方式都为【GET】.


(4)缺点

重定向解决方案需要在浏览器与服务器之间进行多次往返,大量时间消耗在往返次数上,增加用户等待服务时间


相关文章
|
数据采集 JSON 前端开发
JavaScript逆向爬虫实战分析
JavaScript逆向爬虫实战分析
223 4
|
存储 Kubernetes 数据库
docker数据持久化问题
【10月更文挑战第4天】
219 2
|
数据采集 存储 算法
CDGA|数据治理:企业创新发展的强劲引擎
在数据驱动时代,企业竞争已转变为对数据资源的争夺与利用能力的比拼。数据作为新的生产要素,正以前所未有的速度改变着企业的运营模式和决策方式。数据治理通过确保数据质量、安全性和合规性,成为企业创新发展不可或缺的核心能力。本文探讨数据治理如何通过统一管理、挖掘数据价值、强化数据安全和促进跨部门协作,助力企业在激烈的市场竞争中实现创新突破。
CDGA|数据治理:企业创新发展的强劲引擎
|
网络协议 测试技术 Apache
测试Netty高并发工具
测试Netty高并发工具
452 3
|
机器学习/深度学习 人工智能 弹性计算
【ModelScope测评】实现对视频上传的自动化分类
对不起,我是开发小白,纯纯新手OvO
22203 6
【ModelScope测评】实现对视频上传的自动化分类
|
JavaScript 索引
Vue.js的`v-for`用于基于数组或对象渲染列表,如遍历数组生成`<li>`元素
【6月更文挑战第25天】Vue.js的`v-for`用于基于数组或对象渲染列表,如遍历数组生成`<li>`元素。基本语法是`v-for="(item, index) in items"`,支持遍历对象的键值对。注意与`v-if`同用时应使用`<template>`,组件上使用`v-for`需设`key`属性以优化性能。
258 2
|
缓存 BI 数据处理
Cron表达式浅析
Cron表达式浅析
564 1
|
11月前
|
Kotlin
Kotlin教程笔记(21) -高阶函数与函数引用
Kotlin教程笔记(21) -高阶函数与函数引用
117 6
|
SQL Cloud Native 关系型数据库
陈长城:NineData面向Doris实时数仓集成的技术实践
在刚刚过去的北京Doris Summit Asia 2023,玖章算术技术副总裁陈长城受邀参加并做了《NineData面向Doris实时数仓集成的技术实践》报告。
1321 1
C#中字典Dictionary的用法详解
C#中字典Dictionary的用法详解