1. 什么是请求转发和重定向?
请求转发: xxServlet收到请求,然后直接转发给yyServlet,然后yyServlet返回给客户端。整个过程中,客户端发出一个请求,收到一个响应。
重定向:xxServlet收到请求,然后发出一个响应给客户端,客户端立即又发送一个请求访问xxServlet中给的URL,即yyServlet的路径,然后yyServlet给客户端一个响应。整个过程中,客户端发出两个请求,收到两个响应。
2. 请求转发和请求重定向的实现方法
请求转发: 利用RequestDispather接口中的forward方法实现请求转发。
请求重定向:利用HttpServletResponse的sendRedirect方法实现请求重定向。
3.请求的转发和重定向的区别
本质区别:请求的转发只发出了一次请求,而重定向则发出了两次请求。在浏览器的开发工具中可以看到请求的次数:
具体的区别体现在:
1.请求的转发:地址栏是初次发出请求的地址。
请求的重定向:地址栏不是初次发出请求的地址,为最后响应的地址。
2.请求转发:在最终的Servlet中,request和中转的那个request是同一个对象。
请求的重定向:在最终的Servlet中,request和中转的那个request不是同一个对象。
3.请求转发:只能转发给当前web应用的资源。
请求的重定向:可以重定向到任何资源。
4.请求的转发:/代表的是当前web应用的根目录。
请求的重定向:/代表的是当前web站点的根目录。
序号 | 问题 | 重定向redirect | 请求转发forward |
1 | 第二次请求谁请求的? | 浏览器 | 服务器 |
2 | 浏览器发送了几次请求? | 2次以上 | 1次 |
3 | servlet可以共享request吗? | 不可以 | 可以 |
4 | 地址栏是否发生改变? | 是 | 不是 |
5 | 浏览器地址栏显示的是哪一次访问地址? | 最后一次 | 第一次 |
6 | 可以跳转到什么资源? | 任意资源 | 项目内部 |
7 | 第二次的请求路径是? | 绝对路径 | 内部路径 |
参考:
https://blog.csdn.net/u010452388/article/details/80398929 此篇博客总结的形象、易理解;
https://www.cnblogs.com/naihuangbao/p/9795099.html