页面跳转的主要两种实现方式:
- 转发
- 重定向
在客户端中发送请求到服务端,在服务端中匹配的对应的servlet,servler进行对应的处理后,通过getRequestDispatcher(path),把请求转发给指定的前端页面,整个流程都是在服务端中执行(同一个请求)。转发过程中请求(request对象),因为他们是用的同一个请求(request对象).
request.getRequestDispatcher("/strat").forward(request,response);
在客户端中发送请求到服务端,在服务端中匹配的对应的servlet,servler进行对应的处理后,通过sendRedirect(path),向客户端返回这个响应。客户端会收到一个状态码为302的响应,并发送一个新的请求,并把结果返回到前端页面。两个请求是互相对应的。对应的请求(request对象)是不共享的
response.sendRedirect("https://www.baidu.com/");
# 转发
return "forward:https://www.baidu.com/";
# 重定向
return "redirect:https://www.baidu.com/";
转发
- 地址栏不变,只是转发到另外一个站内资源
- 请求次数只有一次,只有服务器交互一次
- 数据不会丢失
重定向
重定向会显示新的地址,可以跳转到任意的URL
请求的次数至少2次以上,主要是客户端的请求次数
第二次请求数据可能会丢失
当第一次请求响应不成功的情况下,那个他也不会重定向成功
区别 | 转发forward | 重定向redirect |
---|---|---|
路径 | 包括项目路径 | 可带项目路径也可是全路径 |
地址栏变化 | 不会变化 | 会变化 |
跳转限制 | 只能跳转本站资源 | 至少两次 |
request数据 | 不丢失 | 会丢失 |
response.setHeader("Refresh","3;http://www.baidu.com"); 3秒后刷新并转发到baidu网页
response.setHeader("Refresh","3;");每隔3秒自动刷新