查了一下API,
forward:
有两个接口带有RequestDispatcher getRequestDispatcher(String path)方法
javax.servlet.ServletContext.getRequestDispatcher(String path)
javax.servlet.ServletRequest.getRequestDispatcher(String path)
javax.servlet.RequestDispatcher有两个方法:
void include(ServletRequest request, ServletResponse response)
其中这里的path必须开始为"/",即这里的path必须相对于context的root.
void forward(ServletRequest request, ServletResponse response)
这里的path可以为相对路径,如果path开始为"/",则也认为是从context的root开始的
redirect
javax.servlet.http.HttpServletResponse.sendRedirect(String location)
Sends a temporary redirect response to the client using the specified redirect location URL.
区别:
1、forward与include访问获取Request范围内的对象,而sendRedirect只能获取URL后面带的参数,不能获取Request范围其它的对象(例如bean),因为forward是这样传递参数的:
<jsp:useBean id="ub" class="UserBean" scope="request"/>
<jsp:setProperty name="ub" property="UserName" value="sa"/>
<jsp:setProperty name="ub" property="Password" value="123"/>
<jsp:forward page="index.jsp">
</jsp:forward>
当然,如果Bean的作用域是Session的话,用sendRedirect也能取到的。
2、forward与include只能访问应用(站点)内的资源,而sendRedirect可以访问内部和外部的资源;貌似forward与include比sendRedirect更安全一些;
3、forward到下一个页面时,客户端不清楚,保留原来的request;而使用sendRedirect时,客户端要再发送一个request来,这样sendRedirect会导致服务器端要处理两个request,效率有点差;但如果是表单提交,完成之后使用forward,就会导致页面内容虽然变了,但浏览器上地址栏地址没有变,再一刷新的话,会有重复的数据产生;
综上:
1、需要使用上一个页面的request的时候,使用forward比较好;而一个业务处理完成,那么使用sendRedirect比较好;
2、当两个页面之间没什么关系,或者需要降低耦合的时候,建议使用sendRedirect,还有就是sendRedirect能够防止刷新和方便用户将页面加入收藏夹,这也是为什么sendRedirect比较流行使用的原因
3、每个方法都有其适用的范围和环境,需求不同时应该使用不同的方法。
分享到:
相关推荐
**六、Servlet API中的forward()和redirect()** 1. **forward()**:服务器端的转发,URL不变,效率较高,常用于内部跳转,避免暴露实际路径。 2. **redirect()**:客户端重定向,浏览器地址栏显示新URL,效率较低,...
**三、forward与redirect的区别** - **forward**:服务器内部重定向,不改变URL,浏览器地址栏保持不变,适合于同一次请求的多个操作。 - **redirect**:客户端重定向,浏览器发起新的请求,URL会发生改变,适合于...
Servlet 中有两种页面跳转方式:forward() 和 redirect()。 * forward():一次请求,在容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址。 * redirect():两次请求,完全的跳转,浏览器将会得到...
本文总结了Java web开发面试中的一些常见问题和答案,涵盖了forward和redirect的区别、JSP中的INCLUDE、应用服务器、数据连接池、JSP的内置对象、JSP指令、Servlet的生命周期等知识点。 一、forward和redirect的...
forward 和 redirect 的区别 在 JavaWeb 中,forward 和 redirect 是两种不同的跳转方式。forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,...
Forward 和 Redirect 都是Servlet 中的请求转发机制,但它们的实现方式不同。Forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不...
JSP 动作包括 <jsp:include />、<jsp:forward />、、、、<jsp:plugin /> 等,各动作的作用不同。 八、Java Servlet API 中 forward 和 redirect 的区别 Java Servlet API 中 forward 和 redirect 的区别在于 ...
3. forward与redirect: - forward:服务器内部重定向,不会改变URL,适合处理同一服务器内的请求。 - redirect:客户端重定向,浏览器重新发起请求,URL会改变,可用于跨域跳转。 4. JSP动态INCLUDE与静态...
本文档总结了 Java Web 面试题一的答案,涵盖了 Servlet 生命周期、Servlet 和 CGI 的区别、forward 和 redirect 的区别、JSP 中动态 include 和静态 include 的区别、JSP 的内置对象、JSP 的常用指令、JSP 的动作、...
- forward确实发生在服务器端,而redirect发生在客户端,且forward不会触发浏览器再次提交请求,而redirect会。 #### 题目四:动态包含 下列哪一个表示动态包含? - `<jsp:include file="top.jsp"/>` - `<%@ ...
2.jsp有哪些动作 3.forward 和redirect的区别 4.JSP中动态INCLUDE与静态INCLUDE的区别 5.两种跳转方式分别是什么 6.J
3. JAVA SERVLET API中的forward()与redirect()的区别: * forward():仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址 * redirect():完全的跳转,浏览器将会得到跳转的地址,并重新发送...
jsp有多种动作,包括<jsp:include>、<jsp:forward>、、、、等。这些动作可以用来包含其他jsp文件、转发到另一页面、设置javaBean、设置属性、获取属性、设置插件等。 6. servlet API中的forward和redirect 在...
与`redirect`不同,`forward`不会改变当前URL,因此对于保持会话状态很有帮助。题目中的第7题明确指出`forward`用于页面跳转。 **JavaBean和JSP标签**: JavaBean是一种用于封装数据和行为的Java类。在JSP中,可以...
69. Forward 和 Redirect 的区别 Forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪里来的,所以它的...
15. `forward()`与`redirect()`:`forward()`是服务器内部跳转,不改变URL;`redirect()`是客户端重定向,URL会显示新的地址。 16. EJB与Java Bean:EJB(Enterprise JavaBeans)是用于构建企业级应用的组件,提供...
2. **forward()与redirect()的区别**:`forward()`是服务器内部跳转,它不会改变浏览器的URL,适合用于在同一应用内的页面间传递。而`redirect()`是浏览器级别的重定向,浏览器会发起一个新的请求,URL会显示为重...
在Java Web中,主要有两种页面跳转方式:请求转发(Request Forward)和重定向(Redirect)。这两种方式有着不同的工作原理和适用场景。 **请求转发(Request Forward)** 请求转发是由服务器内部完成的,不会向...
### Java面试题之Forward与Redirect的区别 #### Forward 1. **概念**: `Forward`是一种服务器端请求跳转的方式,通过`RequestDispatcher`接口中的`forward()`方法实现。 2. **作用**: `Forward`可以将当前请求转发...
7. **Servlet API 中的`forward()`和`redirect()`**: - `forward()`:服务器内部跳转,客户端浏览器地址栏不变,效率较高,适合同服务器内的资源跳转。 - `redirect()`:客户端重定向,地址栏显示新URL,适合跨域...