Javaweb 请求转发和请求重定向

1.请求转发和请求重定向区别

请求转发和请求重定向主要区别,包含以下 5 点:

  • 定义不同
  • 请求方不同
  • 数据共享不同
  • 最终 URL 地址不同
  • 代码实现不同

定义不同:

请求转发:当服务器端收到一个客户端的请求之后,会先将请求转发给目标地址,再将目标地址返回的结果转发给客户端。而客户端对于这一切毫无感知的。

请求重定向指的是服务器端接收到客户端的请求之后,会给客户端返回了一个临时响应头,这个临时响应头中记录了客户端需要再次发送请求(重定向)的 URL 地址,客户端再收到了地址之后,会将请求发送到新的地址上,这就是请求重定向。

请求方不同:

请求转发是服务器端的行为,服务器端代替客户端发送请求,并将结果返回给客户端;而请求重定向是客户端的行为

状态码:请求转发:307

重定向:302

在这里插入图片描述

数据共享不同:

请求转发是服务器端实现的,所以整个执行流程中,客户端(浏览器端)只需要发送一次请求,因此整个交互过程中使用的都是同一个 Request 请求对象和一个 Response 响应对象,所以整个请求过程中,请求和返回的数据是共享的;而请求重定向客户端发送两次完全不同的请求,所以两次请求中的数据是不同的

最终 URL 地址不同:

请求转发是服务器端代为请求,再将结果返回给客户端的,所以整个请求的过程中 URL 地址是不变的;而请求重定向URL是会改变的


2.服务端内部转发案例

先写一个转发源servlet:

/**
 * 服务端内部转发案例
 */
public class ServerSideForwarding extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("服务端内部转发...");
        req.getRequestDispatcher("ssfp").forward(req,resp);
    }
}

req.getRequestDispatcher("ssfp").forward(req,resp);这句话是转发给url为ssfp的servlet执行🐇

再写一个目的servlet:

/**
 * 服务端内部转发目的地址
 */
public class ServerSideForwardingPurpose extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是服务端内部转发目的地址...");
    }
}

xml文件配置如下:

<servlet>
    <servlet-name>ServerSideForwarding</servlet-name>
    <servlet-class>servlets.ServerSideForwarding</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServerSideForwarding</servlet-name>
    <url-pattern>/ssf</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>ServerSideForwardingPurpose</servlet-name>
    <servlet-class>servlets.ServerSideForwardingPurpose</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServerSideForwardingPurpose</servlet-name>
    <url-pattern>/ssfp</url-pattern>
</servlet-mapping>

此时我们若访问url:ssp,控制台会输出:

服务端内部转发...
我是服务端内部转发目的地址...

成功实现服务端内部转发操作!


3.客户端重定向案例

客户端重定向的例子很简单,只需要使用如下语句即可:

// 客户端重定向,重定向到路径ssfp
resp.sendRedirect("/ssfp");
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世界尽头与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值