重定向和转发的区别

这篇具有很好参考价值的文章主要介绍了重定向和转发的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

重定向和转发的区别,java,开发语言

重定向

1、定义

用户通过浏览器发送一个请求,Tomcat服务器接收这个请求,会给浏览器发送一个状态码302,并设置一个重定向的路径,浏览器如果接收到了这个302的状态码以后,就会去自动加载服务器设置的路径

一个页面跳转到另外一个页面(应用场景)、登录页面跳转到主页面: login.jsp====>LoginServlet====>main.jsp

2、特征

①重定向的过程是浏览器(客户端)的行为

②实际上浏览器做了2次请求(当点击登录按钮的时候做了两次请求)(分别是请求login和main.jsp)

③注意上一次请求的request对象会丢失

④重定向有一个非常明显的特征,即浏览器的url变化了

重定向和转发的区别,java,开发语言

3、核心代码

重定向就一句核心代码

response.sendRedirect("main.jsp"); 
//就这一行代码,但是这一行代码必须写在doGet或者doPost方法中

4、测试

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--请求RedirectServlet--%>
<form action="redirect" method="post">
    <input type="text" name="username"/><br>
    <input type="text" name="password"/><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

RedirectServlet

package com.by.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RedirectServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置字符编码
        request.setCharacterEncoding("utf-8");

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        request.setAttribute("username", username);
        request.setAttribute("password", password);

        //登录以后跳转到主页
        //重定向
        //这个TestLoginServlet里面的数据是不能传给target.html的
        response.sendRedirect("main.jsp");
    }
}

web.xml

 <servlet>
        <servlet-name>redirect</servlet-name>
        <servlet-class>com.by.servlet.RedirectServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>redirect</servlet-name>
        <url-pattern>/redirect</url-pattern>
    </servlet-mapping>

main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
这是main页面<br>
<%--
<%=request.getAttribute("username")%>
<%=request.getAttribute("password")%>
--%>

${username}
${password}
</body>
</html>

测试

重定向和转发的区别,java,开发语言

转发

1、定义

用户发送数据请求到服务器,服务器接收当前请求,会调用内部方式(转发)处理该请求,最终把响应给客户端

2、特征

①转发是服务器的行为

②浏览器在这个过程中只有一次行为

③转发可以带有数据 request对象中

④url不会发生任何的变化

重定向和转发的区别,java,开发语言

3、核心代码

request.getRequestDispatcher(“main.jsp”).forward(request,response);
//这一行代码就表示进行了转发,url没有变,但是响应的结果却是一次请求干了两个活

4、测试

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--请求ForwardServlet--%>
<form action="forward" method="post">
    <input type="text" name="username"/><br>
    <input type="text" name="password"/><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

ForwardServlet

package com.by.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ForwardServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置字符编码
        request.setCharacterEncoding("utf-8");

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        request.setAttribute("username", username);
        request.setAttribute("password", password);

        //登录以后跳转到主页
        //重定向
        //这个TestLoginServlet里面的数据是不能传给target.html的
        request.getRequestDispatcher("main.jsp").forward(request, response);
    }
}

web.xml

  <servlet>
        <servlet-name>forward</servlet-name>
        <servlet-class>com.by.servlet.ForwardServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>forward</servlet-name>
        <url-pattern>/forward</url-pattern>
    </servlet-mapping>

main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
这是main页面<br>
${username}
${password}
</body>
</html>

测试

重定向和转发的区别,java,开发语言

总结

转发用forword  重定向用redirect

1.请求次数

	转发:只请求一次      重定向:请求两次

2.地址栏变化:

	转发:地址栏不发生变化     重定向:地址栏发生变化

3.发生位置

转发:发生在服务器而浏览器全然不知    重定向:发生在浏览器

4.访问资源

	转发:只能访问当前服务器的资源     重定向:可以访问其他服务器的资源

5.资源共享文章来源地址https://www.toymoban.com/news/detail-775678.html

转发:可以使用request对象来共享资源
重定向: 不能使用request对象共享资源

到了这里,关于重定向和转发的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java 高阶】一文精通 Spring MVC - 转发重定向(四)

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 高阶 🙉八股文专题:剑指大厂,手撕

    2024年02月11日
    浏览(49)
  • Servlet重定向转发及自动加载

    学好Servlet必须紧紧围绕着请求和响应这两个概念 以上写的代码只是进行请求,然后再响应到客户端。请求的时候没有带数据给Servlet 下面开始写在请求的时候前端带数据到servlet里面,我们servlet要接收前端给我们的这个数据 login.jsp servlet实例 web.xml 请求时候的乱码问题: 响应

    2024年01月25日
    浏览(44)
  • 【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月16日
    浏览(53)
  • Spring MVC:请求转发与请求重定向

    转发( forward ) ,指服务器接收请求后,从一个资源跳转到另一个资源中。请求转发是一次请求,不会改变浏览器的请求地址。 简单示例: 1.通过 String 类型的返回值实现转发

    2024年02月08日
    浏览(46)
  • 一文吃透 SpringMVC 中的转发和重定向

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:SSM 框架从入门到精通 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:一文吃透 SpringM

    2024年02月01日
    浏览(58)
  • Nginx常用配置-反向代理-https重定向-端口转发

    二级目录映射 目前前后端项目分离场景多了以后,一般是前端一个端口,后端一个端口。 如前端是https://example.com/index.html,调用的接口是https://example.com:4433 如此部署对于一些小项目未免有些麻烦,当然你在公网环境下也可以选择使用子域名、其他域名进行跨域访问。 这里说

    2024年02月16日
    浏览(41)
  • SpringMVC转发和重定向, 以及文件功能的处理

    请求转发,请求重定向的区别和使用场景: 请求转发 特点: 请求转发是在服务器内部进行的,客户端不会察觉到。 转发是直接将请求传递给另一个组件,而不需要浏览器的参与。 转发是通过使用 RequestDispatcher 接口的 forward() 方法来实现的。 使用场景: 当两个组件共享相同的请

    2024年01月17日
    浏览(46)
  • lnmp架构部署Discuz论坛并配置重定向转发

    主机名称 IP地址 所需服务/架构 系统版本 lnmp 192.168.195.133 nginx-1.24.0 mysql-5.7 php-8.2.11(lnmp架构) centos 8 需要首先部署好lnmp架构。详细步骤请阅读: 源码编译安装部署lnmp 下载Discuz论坛系统代码包,官网地址如下: Disucz! 下载_免费搭建网站_开源建站系统下载_Discuz!官方_为您提

    2024年02月08日
    浏览(50)
  • Request请求转发和Respones请求重定向详细介绍

    (1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求 (2) 资源A 处理完请求后将 请求发给资源B (3) 资源B 处理完后 将结果响应给浏览器 (4)请求从资源A到资源B的过程就叫 请求转发 具体如何来使用,我们先来看下需求: 针对上述需求,具体的实现步骤为: 1.创建一个R

    2024年02月05日
    浏览(50)
  • 微信小程序web-view嵌入uni-app H5页面,通过H5页面传参给小程序进行转发分享页面,并通过点击转发出来的卡片,定向打开对应H5路径

    index.wxml  index.js 在H5项目的App.vue页面获取参数实现自动跳转到对应页面,包括携带的参数值

    2024年02月12日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包