jsp跳转: getRequestDispatcher()与sendRedirect()的区别解析
版权申诉
139 浏览量
更新于2024-08-18
收藏 18KB DOCX 举报
"本文档主要探讨了在JSP中两种常见的页面跳转方式——`getRequestDispatcher()`和`sendRedirect()`的区别,以及它们各自的工作原理和使用场景。"
在JSP开发中,页面跳转是常见的操作,通常用于实现业务流程中的导航逻辑。有两种主要的跳转方式:`RequestDispatcher.getRequestDispatcher()`和`Response.sendRedirect()`。了解它们的区别对于编写高效且健壮的Web应用程序至关重要。
1. `RequestDispatcher.getRequestDispatcher()` 恳求转发:
- **共享同一个请求(request)对象**:使用`request.getRequestDispatcher()`进行跳转时,前后两个页面共享同一个HTTP请求对象。这意味着请求参数、请求头信息和请求作用域内的对象(如session、page、request)在前后页面间保持不变。
- **服务器端操作**:转发发生在服务器端,浏览器并不知道这一过程,它只看到最初的请求响应。
- **路径处理**:支持相对路径和绝对路径,但推荐使用相对路径,以确保路径的正确性。
- **执行流程**:原始请求到达第一个页面,该页面处理后使用`RequestDispatcher`将请求转发到第二个页面,第二个页面继续处理请求并返回响应。
- **限制**:因为转发是在服务器端完成的,所以不能跳转到外部URL或者跨应用跳转。
2. `Response.sendRedirect()` 重定向:
- **创建新的请求(request)对象**:使用`response.sendRedirect()`会触发浏览器发起一个新的HTTP请求,因此前后页面拥有独立的请求对象,请求参数不会被保留。
- **客户端操作**:重定向由浏览器执行,它接收到服务器返回的302临时重定向状态码,然后根据Location头信息发起新的请求。
- **路径处理**:必须使用绝对路径,因为重定向发生在客户端,浏览器需要完整的URL来发起新请求。
- **执行流程**:原始请求到达第一个页面,该页面处理后通过`sendRedirect()`告知浏览器需要跳转到新的URL,浏览器收到指令后,发起新的请求到指定URL。
- **优势**:可以跳转到外部URL,支持跨应用跳转。
- **限制**:由于是新的请求,所以请求作用域内的对象不会传递到新页面,且不适用于POST请求,因为POST数据不会包含在新的请求中。
选择合适的跳转方式取决于具体需求。如果需要前后页面共享状态或数据,或者希望隐藏实际的URL,通常选择`request.getRequestDispatcher()`进行转发。而如果需要用户看到不同的URL,或者跳转到外部网站,`response.sendRedirect()`更为合适。在实际应用中,还需要注意避免在响应已开始输出后再进行跳转,因为这可能导致错误。
2022-01-20 上传
2011-04-08 上传
2021-12-17 上传
2022-06-20 上传
2021-12-17 上传
2022-01-20 上传
2020-04-21 上传
2019-09-26 上传
2020-10-27 上传
惚如远行客
- 粉丝: 0
- 资源: 5209
最新资源
- 电子技术EDA技术软件综述
- uml统一建模语言介绍
- Linux.C++.Programming.HOWTO
- ubuntu linux命令行简明教程 值得 下载
- C语言-从白痴到资深专家阶梯式教程
- uclinux在armsys上的使用说明书
- 算法和算法分析 值得学习
- JSP2_0技术手册(2M版)
- Gesture-Based Interaction and Communication
- 华为大规模逻辑设计指导书
- 夏宇闻Verilog经典教程
- 半个小时帮你搞定计算机启动过程
- 定单管理系统及需求分析说明说含数据流图
- 图形界面开发--AWT,Swing,SWT
- 用C语言实现的通讯录,实现多项功能
- 开发Spring+Struts+Hibernate应用电子书