1.RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递. 但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面. 在JavaServer Pages (JSP) 开发中,页面跳转是一种常见的操作,它允许用户从一个页面导航到另一个页面。本文将重点讨论两种主要的JSP跳转方式:`RequestDispatcher.forward()` 和 `response.sendRedirect()`,以及JSP标签 `<jsp:forward page="">`。 1. `RequestDispatcher.forward()` `RequestDispatcher.forward()` 方法是在服务器端执行的,它用于将当前HTTP请求转发到另一个Servlet、JSP或HTML文件。当在a.jsp中使用`forward()`将请求重定向到b.jsp时,所有在原始请求(如表单提交)中的信息都会被保留,并且在b.jsp中可以直接访问这些参数,无需再次传递。这是因为转发过程中,请求对象没有改变,只是请求的处理路径发生了变化。然而,`forward()`方法不支持重定向到包含frameset的JSP文件,但可以重定向到包含frames的HTML文件。此外,它不能直接在URL后面附加参数,如`servlet?name=frank`。如果需要传递参数,应使用`request.setAttribute()`方法在服务器端将数据存储,并在目标页面通过`request.getAttribute()`获取。 示例代码: ```java public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=gb2312"); ServletContext sc = getServletContext(); RequestDispatcher rd = null; rd = sc.getRequestDispatcher("/index.jsp"); // 转向的页面 rd.forward(request, response); } ``` 通常,`forward()` 方法在Servlet中使用,而不是直接在JSP中使用。 2. `response.sendRedirect()` 与`forward()`不同,`response.sendRedirect()` 是在客户端浏览器端进行操作。它可以携带参数,例如`servlet?name=frank`,并且可以重定向到不同服务器上的资源,包括包含frameset的JSP文件。在浏览器的地址栏中,用户可以看到重定向的URL。需要注意的是,在使用`sendRedirect()`之前,不应有任何HTML输出,以避免影响重定向,且在调用该方法后应立即跟上`return`语句,确保页面处理完毕后进行跳转。 示例代码: ```java public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=gb2312"); response.sendRedirect("/index.jsp"); } ``` 在JSP页面中,可以直接使用`response.sendRedirect()`进行重定向。 3. `<jsp:forward page="">` JSP 标签 `<jsp:forward>` 是JSP内置的一个动作标签,它同样用于页面间的跳转,但在表现层处理。底层实现上,它实际上会调用`RequestDispatcher.forward()`。与`forward()`方法一样,它不会改变浏览器的URL,但支持重定向到包含frameset的JSP页面。使用`<jsp:forward>`标签,你可以指定要转向的页面,如下所示: ```jsp <jsp:forward page="newPage.jsp" /> ``` 总结: - `RequestDispatcher.forward()` 是服务器端的跳转,效率较高,且浏览器地址栏不变,适用于在同一应用内部跳转。 - `response.sendRedirect()` 是客户端的跳转,地址栏会显示新的URL,支持跨域跳转,适用于需要用户看到新URL的情况。 - `<jsp:forward page="">` 是JSP动作标签,功能与`forward()`类似,主要用于JSP页面内部。 选择哪种跳转方式取决于具体需求。在满足条件的情况下,通常推荐使用`forward()`,因为它更高效,且保持了请求的私密性。但如果需要用户看到新的URL或者需要跨域跳转,`sendRedirect()`是更好的选择。而`<jsp:forward>`则提供了一种在JSP页面内简便的转发机制。
- 粉丝: 21
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ATmega328-Bootloader-Maker(使用ATmega328p芯片制作Arduino Uno R3开发板)
- 一组用 Javascript 解决的技术软件开发面试问题,非常合理.zip
- (源码)基于Spring Boot和WebSocket的贪吃蛇对战系统.zip
- (源码)基于C++的生产线数据传输成功率监控系统.zip
- (源码)基于Spring Boot和Dubbo的文件管理系统.zip
- (源码)基于C++的Local Generals游戏系统.zip
- (源码)基于MQTT协议的智能插座系统.zip
- Insurence_20180221.sav
- 一个简单的 JavaScript 俄罗斯方块游戏.zip
- Python课程设计:基于OpenCV的人脸识别与检测源码