请求转发和重定向的区别

请求转发和重定向的区别

1. 请求转发:

代码:

request.getRequestDispatcher("×××.jsp").forward(request,response);

过程:
1. 客户端发送请求到服务器,Servlet做业务逻辑处理;
2. Servlet 调用forward()方法,服务器Servlet把目标资源返回给客户端浏览器。
请求转发

2. 重定向

代码:

     response.sendRedirect("×××.jsp");

过程:
1. 客户端发送请求,Servlet做出业务逻辑处理;
2. Servlet调用response.sendRedirect()方法,把要访问的目标资源作为response响应头信息发给客户端浏览器。
3. 客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应。
在这里插入图片描述

3. 二者存在的路径问题

  1. 使用相对路径在重定向和转发中没有区别
  2. 二者若使用绝对路径时,根/路径代表了不同含义
    重定向response.sendRedirect(“URL”)是服务器向客户端发送一个请求头信息,由客户端再请求一次服务器。" / “ 指的Tomcat的根目录,写绝对路径应该写成" /项目名称/资源名" 。如"/WebModule/login.jsp"。
    转发是在服务器内部进行的,写绝对路径/开头指的是当前的Web应用程序。绝对路径写法就是"/login.jsp"或"/servlet/LoginServlet"。

4. 二者的区别

请求转发:
a.jsp-----请求1------>servlet.java-----请求1------>c.jsp

跳转到c.jsp后,浏览器的地址为访问servlet.java的地址,刷新时依旧是该地址,因此又向c.jsp再次发送请求,导致重复提交请求。它是一次请求,且RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法;地址栏可以携带作用域的值,即可通过request.getAttribute()传递数据;转发只能转发到本项目下的路径。
重定向:
a.jsp-----请求1---->servlet.java
servlet.java----发送新的url----->a.jsp
a.jsp------请求2---->servlet.java----->c.jsp
跳转到c.jsp后,浏览器的地址为访问c.jsp的地址,刷新时依旧是该地址,因此不会再次发送请求,从而不会导致重复提交请求。它是两次请求,且sendRedirect()是HttpServletResponse对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。它不能携带request作用域的值,故它的请求全部是get请求,若要传递request作用域的值,则将作用域的值存储在session中,后面从session中取出值;重定向可以跳转到本项目外;增删改完成后的跳转都用重定向,若用请求转发会出现表单重复提交的问题。

说明:本文图片出自 https://blog.csdn.net/qq_34111779/article/details/78164027

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值