首页 > 其他分享 >转发与重定向(超详细)

转发与重定向(超详细)

时间:2024-07-25 10:26:50浏览次数:7  
标签:重定向 URL request 详细 转发 response 请求

转发与重定向(超详细)

文章目录

一、概念

在Web开发中,转发(Forward)和重定向(Redirect)是两种常用的请求处理方式,它们用于将客户端请求从一个资源转移到另一个资源。

转发

转发是指服务器内部将请求从一个Servlet或JSP转交给另一个Servlet或JSP进行处理,而客户端对这种内部转移是不可见的。转发使用的是服务器端的资源,不会改变客户端的URL。

重定向

重定向是指服务器发送一个状态码和Location头给客户端,指示客户端重新发起一个新的请求到另一个URL。重定向会导致客户端浏览器的URL发生变化。

二、特点

转发的特点

  1. 单次请求:转发是在服务器内部完成的,客户端只发送一次请求。
  2. URL不变:客户端浏览器的URL保持不变。
  3. 高效:因为没有新的请求和响应的创建,所以转发的效率较高。
  4. 共享数据:可以使用request对象在转发前后的资源间共享数据。

重定向的特点

  1. 两次请求:重定向涉及两次请求和响应,第一次请求得到重定向指令,第二次请求重新请求新的URL。
  2. URL改变:客户端浏览器的URL会改变为新的URL。
  3. 不共享数据:因为是两个独立的请求,不能使用request对象在重定向前后的资源间共享数据。
  4. 适用场景:适用于需要告知客户端新的URL的情况,如处理表单提交后的跳转,防止表单重复提交。

三、转发与重定向使用

转发的使用

在Servlet中使用RequestDispatcher进行转发:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

@WebServlet("/source")
public class SourceServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置请求属性
        request.setAttribute("message", "Forward Example");
        
        // 转发请求
        RequestDispatcher dispatcher = request.getRequestDispatcher("/destination");
        dispatcher.forward(request, response);
    }
}

@WebServlet("/destination")
public class DestinationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求属性
        String message = (String) request.getAttribute("message");
        
        // 生成响应
        response.setContentType("text/html");
        response.getWriter().println("<h1>" + message + "</h1>");
    }
}

重定向的使用

在Servlet中使用response.sendRedirect进行重定向:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

@WebServlet("/source")
public class SourceServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置重定向URL
        response.sendRedirect(request.getContextPath() + "/destination");
    }
}

@WebServlet("/destination")
public class DestinationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 生成响应
        response.setContentType("text/html");
        response.getWriter().println("<h1>Redirect Example</h1>");
    }
}

四、转发与重定向的区别

1.重定向访问服务器两次,转发只访问服务器一次。

2.转发页面的URL不会改变,而重定向地址会改变

3.转发只能转发到自己的web应用内,重定向可以重定义到任意资源路径。

比较图:

的区别

1.重定向访问服务器两次,转发只访问服务器一次。

2.转发页面的URL不会改变,而重定向地址会改变

3.转发只能转发到自己的web应用内,重定向可以重定义到任意资源路径。

比较图:
在这里插入图片描述

标签:重定向,URL,request,详细,转发,response,请求
From: https://blog.csdn.net/yjp1240201821/article/details/140682907

相关文章

  • JVM个人详细笔记总结
    jvm概念和运行过程jvm是java的虚拟机位于操作系统层之上,应用程序层之下,所以才具有跨平台能力,JAVA文件需要通过JVM转译成字节码或通过javac命令编译为.class文件后才能运行JAVA程序,运行时必须要有JRE(运行环境),JDK是开发包,其中包含有JRE。jvm组成JVM结构主要分为三个部分:类......
  • 如何让电报机器人从电报频道转发消息
    如果正确指定了ID,为什么我的机器人会抱怨ID?importtelebotfromtelebotimporttypesbot=telebot.TeleBot('token')@bot.message_handler(content_types=["rules"])defrules(message):bot.send_message(message.chat.id,message.text)if__name__......
  • 邮件运维进阶:邮件原文详细解析-信体(MIME)
    1.什么是邮件信体(BODY)简单的说,一封邮件原文除了信头部分之外,剩下的就是信体,包括邮件正文及附件。邮件正文示例2.邮件原文MIME标准想了解邮件正文,就必须先了解一下MIME标准。MIME协议扩展了电子邮件标准,允许邮件中包含非ASCII字符及多种类型的附件。它引入了Content-Typ......
  • XGBoostError:参数详细程度的值为 -1 超出界限 [0,3]
    错误信息如标题所示。根据我下面的代码,这对我来说没有意义:clf=xgboost.XGBClassifier(verbosity=1)print(clf.__class__,clf.verbosity)#prints<class'xgboost.sklearn.XGBClassifier'>1clf.fit(X=train_data_iter[features].fillna(0),y=train_data_iter['y'......
  • 用户登录后从个人资料和注销链接错误重定向到登录页面
    上下文我正在开发一个Django项目,在该项目中我使用配置文件和注销功能实现了用户身份验证。我遇到的问题是,当我尝试从导航栏访问个人资料或注销链接时,它会将我重定向到登录页面,而不是导航到用户的个人资料或执行注销。个人资料链接应该导航如果用户已登录......
  • vmware 17.5安装 deepin23-RC2桌面社区版【超超详细图文安装教程】
    1、去官网下载安装包最新版本–深度科技社区(deepin.org)2、新建虚拟机向导,选择典型,点击下一步3、选择刚才下载好的镜像文件,点击下一步4、选择Linux,ubuntu64位5、修改虚拟机安装位置,取一个虚拟机名称6、修改磁盘大小,要大于647、自定义硬件,修改内存和处理器大......
  • 基于STC89C51单片机的智能热水器控制系统设计(含文档、源码与proteus仿真,以及系统详细
    本篇文章论述的是基于STC89C51单片机的智能热水器控制系统设计的详情介绍,如果对您有帮助的话,还请关注一下哦,如果有资源方面的需要可以联系我。目录摘 要原理图仿真图代码系统论文资源下载摘 要现在社会发展迅速,人们的生活水平都有所提高,各种热水器的使用早已屡......
  • PyCharm安装教程(详细步骤)
    一、软件简介PyCharm是一款PythonIDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如,调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。......
  • 逆向分析学习入门教程(非常详细)零基础入门到精通,看这一篇就够了!_逆向都要学啥
    前沿从本篇起,逆向工厂带大家从程序起源讲起,领略计算机程序逆向技术,了解程序的运行机制,逆向通用技术手段和软件保护技术,更加深入地去探索逆向的魅力。一、程序如何诞生?1951年4月开始在英国牛津郡哈维尔原子能研究基地正式投入使用的英国数字计算机“哈维尔·德卡特伦”,是......
  • JavaScript中的new map()和new set()使用详细(new map()和new set()的区别)
    简介:newMap():在JavaScript中,newMap()用于创建一个新的Map对象。Map对象是一种键值对的集合,其中的键是唯一的,值可以重复。newSet():在JavaScript中,newSet()是用来创建一个新的Set对象的语法。Set对象是一种集合,其中的值是唯一的,没有重复的值。newSet()可以用......