原视频地址:https://www.bilibili.com/video/BV1vb41187jH?p=45
跳转包括两种方式
- 转发:forward
- 重定向:redirect
转发和重定向的代码
转发
request.getRequestDispatcher("/b").forward(request, response);
重定向
response.sendRedirect(request.getContextPath() + "/b");
转发和重定向的相同点和不同点
- 相同点:都可以完成资源跳转
- 不同点:
- 转发是request对象触发的
- 重定向是response对象触发的
- 转发是一次请求,浏览器地址栏上地址不会变化【/a】
- 重定向是两次请求,浏览器地址栏上的地址发生变化【/a->/b】
- 重定向的路径需要加webapp的根路径
- 转发是在本项目内部完成资源跳转
- 重定向可以完成跨app跳转资源
跳转的下一个资源可以是什么?
跳转的下一个资源可以是web服务器中任何一种资源:可以是Servlet,也可以是HTML,也可以是jsp……
什么时候采用转发,什么时候采用重定向?【大部分情况下都使用重定向】
若想完成跨app跳转,必须使用重定向
若在上一个资源中向request范围中存储了数据,希望在下一个资源中从request范围中将数据取出,必须使用转发
重定向可以解决浏览器的刷新问题
浏览器刷新的是重定向后的html页面,不会再发送请求。
重定向的原理是什么?
response.sendRedirect("/jd/login");
程序执行以上代码,将请求路径/jd/login返馈给浏览器,浏览器自动又向web服务器发送了一次全新的请求:/jd/login
。浏览器地址栏上最终显示的地址是/jd/login
1 | <!--index.html--> |
1 | <!--web.xml--> |
1 | // AServlet.java |
1 | // BServlet.java |