转发(forward)和重定向(redirect)

2,296 阅读2分钟

一. 概念

直接转发方式(Forward) 客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。

==》相当于:“A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A”

间接转发方式(Redirect) 实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。

==》相当于:"A找B借钱,B说没有,让A去找C借"

二. 区别

直接转发方式(Forward)

  1. 转发地址栏路径不变
  2. 转发只能访问当前服务器下的资源
  3. 转发是一次请求,可以使用request对象来共享数据

是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

request.getRequestDispatcher("new.jsp").forward(request, response); //转发到new.jsp

间接转发方式(Redirect)

  1. 地址栏发生变化
  2. 重定向可以访问其他站点(服务器)的资源
  3. 重定向是两次请求。不能使用request对象来共享数据

就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取

response.sendRedirect("new.jsp"); //重定向到new.jsp

三. 应用场景

直接转发方式(Forward) 访问 Servlet 处理业务逻辑,然后 forward 到 jsp 显示处理结果,浏览器里 URL 不变

间接转发方式(Redirect) 提交表单,处理成功后 redirect 到另一个 jsp,防止表单重复提交,浏览器里 URL 变了