转自:http://blog.163.com/tsing_hua/blog/static/139622224201101110836644/
一、调用方式
我们知道,在servlet中调用转发、重定向的语句如下:
request.getRequestDispatcher("new.jsp").forward(request, response); //转发到new.jsp
response.sendRedirect("new.jsp"); //重定向到new.jsp
在jsp页面中你也会看到通过下面的方式实现转发:
<jsp:forward page="apage.jsp" />
当然也可以在jsp页面中实现重定向:
<%response.sendRedirect("new.jsp"); %> //重定向到new.jsp
二、本质区别
解释一
一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:
转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部的一个方法在容器内部完成请求处理和转发动作——》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向过程:客户浏览器发送http请求——》web服务器接受后发送302状态码响应及对应新的location给客户浏览器——》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
解释二
重定向,其实是两次request
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
例子:
response.sendRedirect("loginsuccess.jsp");
请求转发是服务器内部把对一个request/response的处理权,移交给另外一个
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。传输的信息不会丢失。
例子:
RequestDispatcher dis=request.getRequestDispatcher(“loginsuccess.jsp”);
Dis.forward(request,response);
解释三
假设你去办理某个执照
重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。
转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。
分享到:
相关推荐
在Java Web开发中,JSP(Java...总之,理解并熟练掌握`jsp forward`和`redirect`对于开发高效、安全的Java Web应用至关重要。它们是构建动态网站结构的重要工具,合理运用可以优化用户体验并提高应用程序的灵活性。
在Java的Servlet编程中,`转发`和`重定向`是两种不同的机制,用于在服务器端将客户端的请求导向不同的资源。它们的主要区别在于请求处理流程、URL改变以及数据共享方式。 1. 转发(Forward): - 使用`...
在开发Web应用时,我们经常会遇到“forward”和“redirect”的概念,它们是两种不同的页面跳转方式。理解和掌握它们的区别对于优化用户交互和处理请求流至关重要。 **forward(转发)**: - 转发是由服务器端完成的...
在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的请求处理方式,它们在实现客户端和服务器之间的交互时起到至关重要的作用。了解它们的区别对于优化用户体验和提高应用性能至关重要。 首先,让...
通过深入理解和正确配置上述元素,你可以有效地在Struts2框架中利用`<jsp:forward/>`标签实现页面的跳转,避免遇到“no found”的问题。同时,也要注意,在现代Web开发中,更多地使用`<s:redirect/>`标签进行重定向...
在Web开发中,Forward(转发)与Redirect(重定向)是两种常见的页面跳转方式。它们虽然都可以实现从一个页面跳转到另一个页面的功能,但在实现机制、应用场景以及对用户浏览器地址栏的影响等方面存在显著差异。 ##...
本文主要讲解了在JAVA面试中可能遇到的问题,即JAVA中Forward与Redirect两者之间的区别。文中详细介绍了两种请求转发方式的原理和区别,包括请求转发的含义、Forward转发请求的原理、Redirect转发请求的原理等。 ...
`forward()`操作发生在服务器端,对客户端浏览器而言是透明的,即浏览器的URL不会改变,而且请求和响应对象在转发过程中保持不变,可以共享`Request`范围内的数据。 相对地,`sendRedirect()`是`...
本文将深入探讨JSP(JavaServer Pages)环境中绝对路径与相对路径的区别及其应用场景,帮助开发者更好地理解这两种路径类型,并在实际开发中做出合适的选择。 #### 二、绝对路径与相对路径的基本概念 1. **绝对...
在JavaServer Pages (JSP) 技术中,标签、对象存储与提交、以及重定向和转发是核心概念,对于理解和开发动态Web应用程序至关重要。以下是对这些知识点的详细阐述: 1. JSP 标签: JSP标签是用于简化页面逻辑和提高...
JSP页面跳转有两种方式:使用`<jsp:forward>`标签和`<c:redirect>`标签。这两种方式都可以实现页面间的跳转,但具体实现机制有所不同。 - **使用<jsp:forward>标签**: ```jsp <jsp:forward page="/newPage.jsp" ...
4.forward和redirect的区别 forward是把另一个页面加载到本页面,不改变浏览器的路径,redirect是跳转到另一个页面,会改变浏览器的路径。forward可以使用request.getRequestDispatcher("转发路径").forward...
主要分为直接请求转发(Forward)和间接请求转发(Redirect)。这两种转发方式在处理请求时有着显著的区别。 直接请求转发(Forward): 直接请求转发是服务器内部的资源调度,用户在浏览器中只会看到最初的请求...
例如,可以通过查询字符串的形式在ActionForward的路径中传递参数,这些参数可以在目标Action或JSP页面中被解析并使用。 - **使用动态转发**:除了静态配置的ActionForward之外,Struts框架还支持动态生成Action...
- **在JSP中定义类变量**:了解如何在JSP页面中定义和使用类变量。 - **JSP九大默认对象**:介绍JSP提供的九个内置对象及其用途。 #### 第15章 分页 - **数据库分页**:实现数据库查询结果的分页展示。 - **使用...
6、jsp:forward 7、简单计数器 8、设置页面属性 9、使用GB2312编码 10、使用Big5编码 11、c:catch的用法 12、<c:forEach> begin、end和step的用法 13 、 <c:forEach> 循环 14、<c:forEach> varStatus 的四种属性 15...
四、Forward 和 Redirect * Forward 是把另一个页面加载到本页面,不改变浏览器的路径。 * Redirect 是跳转到另一个页面,会改变浏览器的路径。 * 重定向:response.sendRedirect("重定向的路径")。 * 转发:...
4. **转发与重定向**:理解RequestDispatcher接口,学会使用forward()和redirect()方法在请求之间导航。 5. **JSP动作指令**:学习JSP的<jsp:include>、<jsp:forward>、<jsp:useBean>等动作指令,以及EL...
### JSP页面转向和页面转发的区别 在Java Web开发中,页面转向(重定向)与页面转发是两个非常重要的概念,它们主要用于实现不同页面之间的跳转。这两种方式虽然都能达到跳转的效果,但在实际应用中有着不同的应用...