`
songhongchen
  • 浏览: 122740 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

forward,include,redirect学习

阅读更多
查了一下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、每个方法都有其适用的范围和环境,需求不同时应该使用不同的方法。
1
0
分享到:
评论
1 楼 hydex 2010-05-27  
mark...

相关推荐

    JSPServlet新手学习资料

    **六、Servlet API中的forward()和redirect()** 1. **forward()**:服务器端的转发,URL不变,效率较高,常用于内部跳转,避免暴露实际路径。 2. **redirect()**:客户端重定向,浏览器地址栏显示新URL,效率较低,...

    jsp学习资料及应用

    **三、forward与redirect的区别** - **forward**:服务器内部重定向,不改变URL,浏览器地址栏保持不变,适合于同一次请求的多个操作。 - **redirect**:客户端重定向,浏览器发起新的请求,URL会发生改变,适合于...

    Java-Web简答题.docx

    Servlet 中有两种页面跳转方式:forward() 和 redirect()。 * forward():一次请求,在容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址。 * redirect():两次请求,完全的跳转,浏览器将会得到...

    java面试题web部分

    本文总结了Java web开发面试中的一些常见问题和答案,涵盖了forward和redirect的区别、JSP中的INCLUDE、应用服务器、数据连接池、JSP的内置对象、JSP指令、Servlet的生命周期等知识点。 一、forward和redirect的...

    javaweb 简历

    forward 和 redirect 的区别 在 JavaWeb 中,forward 和 redirect 是两种不同的跳转方式。forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,...

    Java Web类

    Forward 和 Redirect 都是Servlet 中的请求转发机制,但它们的实现方式不同。Forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不...

    web项目答辩

    JSP 动作包括 &lt;jsp:include /&gt;、&lt;jsp:forward /&gt;、、、、&lt;jsp:plugin /&gt; 等,各动作的作用不同。 八、Java Servlet API 中 forward 和 redirect 的区别 Java Servlet API 中 forward 和 redirect 的区别在于 ...

    JSP和SERVLET笔试常遇到的一些问题

    3. forward与redirect: - forward:服务器内部重定向,不会改变URL,适合处理同一服务器内的请求。 - redirect:客户端重定向,浏览器重新发起请求,URL会改变,可用于跨域跳转。 4. JSP动态INCLUDE与静态...

    2023年web面试题一答案.doc

    本文档总结了 Java Web 面试题一的答案,涵盖了 Servlet 生命周期、Servlet 和 CGI 的区别、forward 和 redirect 的区别、JSP 中动态 include 和静态 include 的区别、JSP 的内置对象、JSP 的常用指令、JSP 的动作、...

    jsp面试考题

    - forward确实发生在服务器端,而redirect发生在客户端,且forward不会触发浏览器再次提交请求,而redirect会。 #### 题目四:动态包含 下列哪一个表示动态包含? - `&lt;jsp:include file="top.jsp"/&gt;` - `&lt;%@ ...

    JSP试题及答案(1)1

    2.jsp有哪些动作 3.forward 和redirect的区别 4.JSP中动态INCLUDE与静态INCLUDE的区别 5.两种跳转方式分别是什么 6.J

    SQlServer面试题

    3. JAVA SERVLET API中的forward()与redirect()的区别: * forward():仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址 * redirect():完全的跳转,浏览器将会得到跳转的地址,并重新发送...

    JavaWeb答辩问题.doc

    jsp有多种动作,包括&lt;jsp:include&gt;、&lt;jsp:forward&gt;、、、、等。这些动作可以用来包含其他jsp文件、转发到另一页面、设置javaBean、设置属性、获取属性、设置插件等。 6. servlet API中的forward和redirect 在...

    开发框架学习

    与`redirect`不同,`forward`不会改变当前URL,因此对于保持会话状态很有帮助。题目中的第7题明确指出`forward`用于页面跳转。 **JavaBean和JSP标签**: JavaBean是一种用于封装数据和行为的Java类。在JSP中,可以...

    JavaWeb面试题汇编.pdf

    69. Forward 和 Redirect 的区别 Forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪里来的,所以它的...

    Java(J2SE、J2EE)学习小结

    15. `forward()`与`redirect()`:`forward()`是服务器内部跳转,不改变URL;`redirect()`是客户端重定向,URL会显示新的地址。 16. EJB与Java Bean:EJB(Enterprise JavaBeans)是用于构建企业级应用的组件,提供...

    javaweb面试总结

    2. **forward()与redirect()的区别**:`forward()`是服务器内部跳转,它不会改变浏览器的URL,适合用于在同一应用内的页面间传递。而`redirect()`是浏览器级别的重定向,浏览器会发起一个新的请求,URL会显示为重...

    Java Web中的页面跳转.pdf

    在Java Web中,主要有两种页面跳转方式:请求转发(Request Forward)和重定向(Redirect)。这两种方式有着不同的工作原理和适用场景。 **请求转发(Request Forward)** 请求转发是由服务器内部完成的,不会向...

    文章分类:Java编程,java面试题4

    ### Java面试题之Forward与Redirect的区别 #### Forward 1. **概念**: `Forward`是一种服务器端请求跳转的方式,通过`RequestDispatcher`接口中的`forward()`方法实现。 2. **作用**: `Forward`可以将当前请求转发...

    华为面试题

    7. **Servlet API 中的`forward()`和`redirect()`**: - `forward()`:服务器内部跳转,客户端浏览器地址栏不变,效率较高,适合同服务器内的资源跳转。 - `redirect()`:客户端重定向,地址栏显示新URL,适合跨域...

Global site tag (gtag.js) - Google Analytics