Spring系列(四) --- 请求转发(forward)和请求重定向(redirect)的区别

13 篇文章 0 订阅

请求转发和请求重定向

请求转发和请求重定向是我们经常使用的两种页面跳转方式, 但是两者有着诸多区别, 例如跳转的方式, 代码的实现以及最终的 url 地址都有所不同.

1请求转发

请求转发(forward): 服务器帮客户进行请求转发并将结果响应给客户端, URL 地址是不变的, 因为是服务器端进行转发和响应的, 并且请求转发只访问一次, 两种实现方式如下:
方式一: (自行写一个简单的 html页面放在 static文件下)

@Controller // 注意这里不要写成 @RestController, 因为我们返回的是一个页面
public class DemoController {
    @RequestMapping("/forward")
    public String myForward() {
        // 这里可以省略掉 forward, 因为页面默认的转发就是请求转发
        return "forward: /hello.html";
    }
}

方式二:

@Controller
public class DemoController {
    @RequestMapping("/fw2")
    public void myForward2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/hello.html").forward(request,response);
    }
}

测试:
在这里插入图片描述
在这里插入图片描述

2 请求重定向

请求重定向(redirect): 服务器端将请求重新定义到要访问的地址上, URL 地址会发生变化; 请求重定向是两次访问, 发生在客户端, 也就是浏览器端, 服务器端不用替用户进行请求操作, 两种实现方式如下:
方式一:

@Controller
public class DemoController {
    @RequestMapping("/rd1")
    public String myRedirect1() {
        return "redirect:/hello.html";
    }
}

方式二:

@Controller
public class DemoController {
    @RequestMapping("/rd2")
    public void myRedirect2(HttpServletResponse response) throws IOException {
        response.sendRedirect("/hello.html");
    }
}

测试:
在这里插入图片描述
在这里插入图片描述

3 总结

  • 请求转发 URL 地址不变, 因为是服务器端进行转发和响应的; 请求重定向 URL 地址会发生改变, 因为服务器端直接将请求重定向到具体的地址上;
  • 请求转发有可能发生外部资源的丢失,导致访问不到; 而请求重定向是直接重定向到 URL 地址上, 所以请求重定向和直接访问目标地址的效果是一样的, 不会存在外部资源丢失的情况;
  • 请求转发是一次访问, 请求重定向是两次访问.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值