http://blog.csdn.net/christymomo/article/details/5418968
在Servlet(JSP)中Forward与Redirect 的区别:
- forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法只能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法可以重定向到任何URL, 因为这种方法是修改http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变。
- forward重定向将原始的HTTP请求对象(request)从一个servlet实例传递到另一个实例,而采用sendRedirect方式两者不是同一个application。
- 基于第二点,参数的传递方式不一样。forward的form参数跟着传递,所以在第二个实例中可以取得HTTP请求的参数。sendRedirect只能通过链接传递参数,response.sendRedirect(“login.jsp?param1=a”)。
- sendRedirect能够处理相对URL,自动把它们转换成绝对URL,如果地址是相对的,没有一个‘/’,那么Web container就认为它是相对于当前的请求URI的。比如,如果为response.sendRedirect("login.jsp"),则会从当前servlet 的URL路径下找login.jsp: http://10.1.18.8:8081/dms/servlet/Servlet 重定向的URL: http://10.1.18.8:8081/dms/servlet/login.jsp,如果为response.sendRedirect("/login.jsp")则会从当前应用径下找 url:http://10.1.18.8:8081/login.jsp。而forward不能这样处理相对路径。
Servlet中的Forward与Redirect:
需要用到的类与方法有
- ServletRequest.getRequestDispatcher(String)
- RequestDispatcher.forward(request, response)
- HttpServletResponse.sendRedirect(String)
Forward:
RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); dispatcher .forward(request, response);
request.getNamedDispatche("ServletName").forward(request, response)
页面的路径是相对路径。forward方式只能跳转到本web应用中的页面上。跳转后浏览器地址栏不会变化。使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute
Redirect:
response.sendRedirect("/index.jsp"); response.sendRedirect("http://www.google.com");
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中。跳转后浏览器地址栏变化。这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
JSP中的forward跟redirect:
Redirect:
response.sendRedirect();
此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client. at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558) ...
跳转后浏览器地址栏变化。如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;
Forward:
<jsp:forward page="" />
此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: forward() not allowed after buffer has committed. at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134) at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101) at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836) ...
跳转后浏览器地址栏不变,但是只能跳到当前主机下。此语句后面的语句执行完成后才会跳转
相关推荐
19.Servlet中forward和redirect的区别.avi
在Java Servlet中,通常通过`RequestDispatcher.forward()`方法实现。 - 浏览器向服务器发送请求后,服务器接收到请求并处理,然后直接将请求转发到指定的内部资源,如一个JSP页面或Servlet。 - 转发可以在同一个Web...
下列关于JSP和Servlet中forward与redirect的描述,哪一项是不正确的? - forward不会改变浏览器地址栏中的URL,而redirect会。 - 在forward和redirect的情况下,服务器都会发送新的URL给浏览器打开。 - forward不会...
在实际开发中,选择`forward`还是`redirect`应根据需求来定。例如,如果需要保护用户的隐私,避免暴露敏感的请求信息,那么通常会使用`redirect`。另一方面,如果希望在多个组件间共享请求数据,或者在处理完一系列...
在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的请求处理方式,它们在实现客户端和服务器之间的交互时起到至关重要的作用。了解它们的区别对于优化用户体验和提高应用性能至关重要。 首先,让...
本文主要讲解了在JAVA面试中可能遇到的问题,即JAVA中Forward与Redirect两者之间的区别。文中详细介绍了两种请求转发方式的原理和区别,包括请求转发的含义、Forward转发请求的原理、Redirect转发请求的原理等。 ...
Servlet 中 forward 与 redirect 的区别 - `forward` 是内部转发,它在服务器端进行,只有一次请求和响应,因此转发后不会丢失请求属性。 - `redirect` 是重定向,它会导致客户端发起新的请求,因此两次请求和响应...
5. **转发和重定向**:`RequestDispatcher`接口提供了`forward()`和`redirect()`方法,用于在服务器端将请求从一个资源转向另一个资源。 6. **多线程模型**:Servlet默认在每个请求上创建一个新的线程,理解这一...
在Servlet中,请求转发与重定向(Redirect)不同。重定向是客户端行为,浏览器收到服务器的302响应后会发起一个新的请求,而请求转发是服务器内部操作,不会生成新的请求。因此,请求转发适用于需要共享请求属性或者...
在Java的Servlet编程中,`转发`和`重定向`是两种不同的机制,用于在服务器端将客户端的请求导向不同的资源。它们的主要区别在于请求处理流程、URL改变以及数据共享方式。 1. 转发(Forward): - 使用`...
Servlet 跳转可以分为两大类:Redirect 跳转和 Forward 跳转。 Redirect 跳转 Redirect 跳转是指将控制权转移到另一个资源,并将 URL 修改为新的资源的 URL。Redirect 跳转可以使用 response.sendRedirect() 方法...
forward()方法(RequestDispatcher接口)在服务器端完成,请求从一个Servlet传递到另一个Servlet或JSP页面。而redirect()方法(HttpServletResponse)则告诉浏览器发起一个新的请求。 7. **过滤器(Filter)** ...
- Servlet通过forward()或redirect()方法,决定跳转到哪个JSP页面。 - JSP页面通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)从request或session中获取数据,并显示在页面上。 6...
这会导致原始请求中的所有数据(包括`Request`范围内的属性)丢失,因为它们与新请求无关。此外,`sendRedirect()`可以重定向到任何可访问的URL,不局限于应用程序内部。 两者的区别体现在以下几个方面: 1. 地址...
页面跳转在Web开发中也非常重要,常见的跳转方式有重定向(Redirect)和转发(Forward)。重定向是让客户端发起一个新的HTTP请求,而转发则是服务器内部的操作,不涉及客户端的额外请求。 在实际应用中,Servlet...
在实际开发中,理解和掌握Servlet与JSP的跳转机制以及它们如何协同工作,对于构建高效、可维护的Java Web应用至关重要。同时,合理利用Eclipse或MyEclipse这样的IDE能提升开发效率,更好地实现需求。
- `forward()`方法将请求转发给另一个资源,而`redirect()`则告诉客户端重新发起一个新的请求。 6. **过滤器(Filter)**: - Filter是Servlet技术的一部分,可以对请求和响应进行预处理和后处理,如登录验证、...
在这个初级基础知识入门笔记中,我们将深入理解Servlet的基本概念、开发过程、运行机制以及与HTTP协议的关系。 1. **Servlet基础** - Servlet是一种Java类,它实现了Servlet接口或者继承了HttpServlet类,以处理...
### JSP与Servlet复习知识点详解 #### 一、JSP与Servlet基础知识 **1. JSP简介** - **定义**: Java Server Pages (JSP) 是一种基于Java技术的服务器端脚本语言,用于创建动态网页。 - **特点**: JSP页面可以将...
**六、Servlet API中的forward()和redirect()** 1. **forward()**:服务器端的转发,URL不变,效率较高,常用于内部跳转,避免暴露实际路径。 2. **redirect()**:客户端重定向,浏览器地址栏显示新URL,效率较低,...