转发与重定向

转发是服务器行为,重定向是客户端行为。转发耗时比重定向少。

转发——>客户浏览器发送HTTP请求——>web服务器接受请求——>调用内部一个方法在容器内部完成请求处理和转发动作——>再将转发跳转到的那个网页资源返回给客户;  转发只能在同一个容器内完成 转发的时候浏览器地址是不会变的,在客户浏览器里只会显示第一次进入的那个网址或者路径,客户看不到这个过程,只是得到了想要的目标资源。转发行为浏览器只做了一次请求。(转发只能跳转一次)

重定向——>客户浏览器发送HTTP请求——>web服务器接受请求后发送302状态码以及新的位置给客户浏览器——>客户浏览器发现是302响应,则自动再发送一个新的HTTP请求,请求指向新的地址(302:Found  临时移动,但资源只是临时被移动。即你访问网址A,但是网址A因为服务器端的拦截器或者其他后端代码处理的原因,会被重定向到网址B。)——>服务器根据此请求寻找资源发个客户;再客户浏览器中显示的是重定向之后的路径,客户可以看到地址的变化。重定向行为浏览器做了至少两次请求。(重定向可以跳转多次)

从图解可以看出转发时客户端只发送了一次请求,而重定向时客户端需要发送至少两次请求。

如生活实例(假如去办个证件):

重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。 

转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。

一、转发:

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><form action="second" method="get"><input type="submit" value="登陆 "></form>
</body>
</html>

Second.java

package com.xianyadong.demo;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/second")
public class Second extends HttpServlet{private static final long serialVersionUID = 1L;public Second() {super();}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{System.out.println("=====");request.getRequestDispatcher("/welcome").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{doGet(request, response);}}

Welcome.java

package com.xianyadong.demo;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/welcome")
public class Welcome extends HttpServlet {private static final long serialVersionUID = 1L;public Welcome() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();writer.println("<html>");writer.println("<body>欢迎"+"</body>");writer.println("</html>");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

浏览器点击登录去访问Second.java 然后Second通过转发返回给浏览器Welcome.java的内容。

 

 

 

 

 

 

 

 

 

 

 

 

 

从图可以看出网站地址只会显示second不会出现welcome。

二、重定向

index.java 还用上面原来的

Second.java

package com.kaoshi.chongdingxiang;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/second")
public class Second extends HttpServlet {private static final long serialVersionUID = 1L;public Second() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.sendRedirect("welcome");}}

Welcome.java

package com.kaoshi.chongdingxiang;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/welcome")
public class Welcome extends HttpServlet {private static final long serialVersionUID = 1L;public Welcome() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();StringBuffer requestURL = request.getRequestURL();writer.println(requestURL.toString());writer.println("<br>");int status = response.getStatus();writer.println(status);writer.println("<html>");writer.println("<body>欢迎"+"</body>");writer.println("</html>");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

从图片中网址那栏不难看出转发的后面是Second而重定义的后面则是Welcome。

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

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

相关文章

将您重定向的次数过多什么意思_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; 代码片段…

博士申请 | 澳大利亚悉尼科技大学招收人工智能/软件工程方向全奖博士生

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 悉尼科技大学 澳大利亚悉尼科技大学&#xff08;UTS&#xff09;座落于风景优美的悉尼市中心…