forward 与 redirect的区别

本文解释了HTTP中forward和redirect的区别,通过流程图展示两者在服务器和浏览器间的交互过程,帮助理解请求如何在服务器内部转发或重定向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

forward 顾名思义:转发,从服务器转发。因此在客户端的浏览器地址里看不出url的变化

redirect 顾名思义:重定向,在客户端重新定向了一次,因此在客户端能看懂啊url的变化。

 

 

这两者的区别可以用下面的图来表示(转载)

forward

 

<%@ page contentType="text/html; charset=gb2312"
%>
<%
    String color = request.getParameter("color"

);
    if("red".equals(color)) {
        request.getRequestDispatcher("red.jsp").forward(request, response);
    } else if("green".equals(color)) {
        request.getRequestDispatcher("green.jsp").forward(request, response);
    }
%>
 

无论转发至red.jsp还是green.jsp,地址栏上显示的都是test.jsp。

这是为什么呢?通过下面的流程图会让我们容易理解:

  1. 浏览器向test.jsp发送请求。

  2. test.jsp计算客户选择的颜色,将请求转发至red.jsp。

  3. red.jsp返回响应给浏览器。

这 下知道为什么浏览器的地址没有变化了吧?因为浏览器只是执行了对test.jsp的请求,test.jsp到red.jsp的部分是在服务器内执行的,浏 览器并不知道服务器里到底发生了什么,它只知道自己获得的响应是test.jsp发回来的,甚至不知道服务器还有个red.jsp。

 

redirect

test.jsp中需要这样写:

<%@ page contentType="text/html; charset=gb2312"%>
<%
    String color = request.getParameter("color"
);
    if("red".equals(color)) {
        response.sendRedirect("red.jsp");
    } else if("green".equals(color)) {
        response.sendRedirect("green.jsp");
    }
%>
 
  1. 浏览器向test.jsp发送请求。

  2. test.jsp计算客户选择的颜色,向浏览器发送一个页面重定向(redirect)的响应,响应中包含red.jsp的url地址。

  3. 浏览器根据页面重定向(redirect)响应中的red.jsp地址,再次向服务器发送请求,这次请求的就是red.jsp了。

  4. red.jsp执行,返回响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值