1. 转发
在请求的处理过程中,Servlet完成了自己的任务,需要把请求转交给下一个资源继续处理。
转发操作的核心部分是在服务器端完成的,所以浏览器感知不到,整个过程中浏览器只发送一次请求。
![图片[1]-Servlet 请求转发与重定向-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-54.png)
代码:
request.getRequestDispatcher("/index.html").forward(request, response);
2. 重定向
在请求的处理过程中,Servlet完成了自己的任务,然后以一个响应的方式告诉浏览器:“要完成这个任务还需要你另外再访问下一个资源。
![图片[2]-Servlet 请求转发与重定向-深吸氧](https://xiyang-blog.oss-cn-hangzhou.aliyuncs.com/blog/2022/10/image-55.png)
代码:
response.sendRedirect("/index.html");
3. 对比
转发 | 重定向 |
浏览器地址栏没变化,显示的是第一个资源的地址 | 浏览器地址栏有变化,显示的是第二个资源的地址 |
全程使用的是同一个request对象 | 全程使用的是不同的request对象 |
在服务器端完成 | 在浏览器端完成 |
目标资源地址由服务器解析 | 目标资源地址由浏览器解析 |
目标资源可以在WEB-INF目录下 | 目标资源不能在WEB-INF目录下 |
目标资源仅限于本应用内部 | 目标资源可以是外部资源 |
4. 应用场景
可以简单的判断:能用转发的先用转发,如果转发不行,再使用重定向。
- 需要通过同一个request对象把数据携带到目标资源:只能用转发
- 如果希望前往下一个资源之后,浏览器刷新访问的是第二个资源:只能用重定向
© 版权声明
THE END
暂无评论内容