web系统中资源跳转:
转发 forward
重定向 redirect
//转发 一次请求
req.getRequestDispatcher("zhuan").forward(req, resp);
// 重定向 两次请求 执行到此处,讲路径返回给浏览器,浏览器又向服务器发送了一次请求
resp.sendRedirect(req.getContextPath()+"/chong");
转发和重定向的相同点和不同点:
相同点:都可以完成资源跳转
不同点:
- 转发是request对象触发的
- 重定向是response对象触发的
- 转发是一次请求,浏览器地址栏上的地址不会发生变化
- 重定向是两次请求,浏览器地址栏上的地址会发生变化
- 重定向的 路径需要加webapp的根路径,因为它相当于第二次发起请求时浏览器重新发起一次全新的请求(Get请求)
- 转发是在本项目内完成的资源跳转
- 重定向是可以完成跨app跳转资源
- 转发是服务器的操作,重定向是客户端的操作
跳转的下一个资源可以是Servlet / HTML / JSP
什么时候采用转发,什么时候采用重定向?(大部分使用重定向)
- 若想完成跨app跳转,必须使用重定向
- 若在上一个资源中,向request范围中存储了数据,希望在下一个资源中取出,使用转发
- 重定向可以解决浏览器的刷新问题 刷新刷新的是最后一次请求