`

Java servlet中的forward和redirect

阅读更多

一直对Servlet的几种页面跳转方式,理解的糊里糊涂的,今天在网上搜了一把,找到一遍比较好的,记下来,以后看看。 
  跳转分两部分,一是发生在servlet,一是在JSP,其实JSP也就是servlet,不过还是有点差异滴。

Servlet: 
当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。 
1)  redirect 方式 
response.sendRedirect("/a.jsp"); 
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如: 
response.sendRedirect("http://www.ycul.com");

跳转后浏览器地址栏变化。 
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。

2) forward方式 
RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); 
dispatcher .forward(request, response); 
页面的路径是相对路径。forward方式只能跳转到本web应用中的页面上。

跳转后浏览器地址栏不会变化。 
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute


JSP: 
1)  response.sendRedirect(); 
和servlet的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的操作已经无意义了; 
如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;


2)  response.setHeader("Location",""); 
此语句前不允许有out.flush(),如果有,页面不会跳转。 
跳转后浏览器地址栏变化 
此语句后面的语句执行完成后才会跳转

3)  <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) 
... 
跳转后浏览器地址栏不变,但是只能跳到当前主机下 
此语句后面的语句执行完成后才会跳转

 

http://www.cnblogs.com/chenatu/archive/2011/10/01/2197134.html

分享到:
评论

相关推荐

    JAVA面试题之Forward与Redirect的区别详解

    本文主要讲解了在JAVA面试中可能遇到的问题,即JAVA中Forward与Redirect两者之间的区别。文中详细介绍了两种请求转发方式的原理和区别,包括请求转发的含义、Forward转发请求的原理、Redirect转发请求的原理等。 ...

    javaservlet指南

    8. Forward和Redirect:Servlet可以使用`RequestDispatcher`的`forward()`方法将请求转发给JSP,或者使用`response.sendRedirect()`进行重定向,实现业务逻辑和视图的分离。 9. Model-View-Controller(MVC)架构:...

    转发和重定向的区别 forward和redirect的区别

    在Java的Servlet编程中,`转发`和`重定向`是两种不同的机制,用于在服务器端将客户端的请求导向不同的资源。它们的主要区别在于请求处理流程、URL改变以及数据共享方式。 1. 转发(Forward): - 使用`...

    深入Java Servlet 网络编程Part3

    11. **请求转发与重定向**:`RequestDispatcher`接口提供了`forward()`和`redirect()`方法,前者在服务器端完成页面跳转,后者则让客户端发起新的请求。 12. **异常处理**:Servlet可以通过`try-catch-finally`块...

    forward与redirect区别

    在Java Servlet中,通常通过`RequestDispatcher.forward()`方法实现。 - 浏览器向服务器发送请求后,服务器接收到请求并处理,然后直接将请求转发到指定的内部资源,如一个JSP页面或Servlet。 - 转发可以在同一个Web...

    servlet跳转的几种情况

    Servlet 跳转可以分为两大类:Redirect 跳转和 Forward 跳转。 Redirect 跳转 Redirect 跳转是指将控制权转移到另一个资源,并将 URL 修改为新的资源的 URL。Redirect 跳转可以使用 response.sendRedirect() 方法...

    【动力节点Java学院】Servlet视频教程之Session

    总的来说,这个动力节点的Java Servlet视频教程全面覆盖了Cookie和Session的使用,不仅讲解了基本操作,还深入到它们的工作原理和应对策略,对于Java Web开发者来说,是一份非常实用的学习资源。通过学习,开发者...

    java中dispcter和forward的区别

    在Java的Web开发中,`Dispatcher`通常指的是`RequestDispatcher`接口,它是Servlet API的一部分,提供了请求转发和包含的功能。而`forward()`方法是`RequestDispatcher`的一个关键方法,它用于在服务器端将请求转发...

    servlet中实现请求转发,用户登录

    在Servlet中,请求转发与重定向(Redirect)不同。重定向是客户端行为,浏览器收到服务器的302响应后会发起一个新的请求,而请求转发是服务器内部操作,不会生成新的请求。因此,请求转发适用于需要共享请求属性或者...

    第七章 Java Servlet基础(新)1

    Java Servlet基础是Java Web开发中的核心概念,它是JSP技术的基础。Servlet是一种特殊的Java类,设计用于在服务器端处理HTTP协议请求。在第七章中,我们将深入理解Servlet的部署、创建、运行,以及如何通过JSP页面...

    Java面试题,jsp&servlet面试题

    10. **Servlet API中的forward()和redirect()**: - **forward()**:服务器内部重定向,客户端无感知,效率高,不改变URL。 - **redirect()**:客户端重定向,浏览器收到302响应,重新发起请求,URL可见。 11. **...

    java-web学习demo--最简单的servlet jsp跳转传值

    在Java Web开发中,Servlet和JSP是两个重要的组件,它们常常被用来构建动态Web应用程序。本示例"java-web学习demo--最简单的servlet jsp跳转传值"主要展示了如何通过Servlet处理HTTP请求,并将数据传递到JSP页面进行...

    java面试大全视频版

    Java面试题19.Servlet中forward和redirect的区别 Java面试题20.jsp和Servlet的相同点和不同点 Java面试题21.内置对象和四大作用域和页面传值 Java面试题22.Session和Cookie的区别和使用场景 Java面试题23.mvc模式和...

    forward转发与redirect重定向的区别.zip

    在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的请求处理方式,它们在实现客户端和服务器之间的交互时起到至关重要的作用。了解它们的区别对于优化用户体验和提高应用性能至关重要。 首先,让...

    jsp forward与redirect实探

    在Java Web开发中,JSP(Java...总之,理解并熟练掌握`jsp forward`和`redirect`对于开发高效、安全的Java Web应用至关重要。它们是构建动态网站结构的重要工具,合理运用可以优化用户体验并提高应用程序的灵活性。

    servlet中文帮助文档CHM格式

    5. **转发和重定向**:`RequestDispatcher`接口提供了`forward()`和`redirect()`方法,用于在服务器端将请求从一个资源转向另一个资源。 6. **多线程模型**:Servlet默认在每个请求上创建一个新的线程,理解这一...

    servlet面试题

    - 在MVC模式中,Servlet通常作为控制器(Controller),负责处理请求和响应,而JSP作为视图(View)负责展示数据。 4. **内置对象**: - Servlet没有内置对象的概念。 - JSP提供了多种内置对象,如`request`、`...

    java servlet 几种页面跳转的方法

    总结,Java Servlet中的页面跳转主要分为`redirect`和`forward`两种方式,每种都有其特定的应用场景。`redirect`适用于需要改变URL或跳转到外部资源的情况,而`forward`则适用于保持URL不变且在同一个应用内进行页面...

    servlet api 官方HTML文档

    Servlet API是由Java Servlet规范定义的一组接口和类,用于创建和部署Servlet。通过实现Servlet接口或继承HttpServlet类,开发者可以编写处理HTTP请求的Java代码。 2. **Servlet生命周期** Servlet的生命周期包括...

    servlet 源码

    - `forward()`方法将请求转发给另一个资源,而`redirect()`则告诉客户端重新发起一个新的请求。 6. **过滤器(Filter)**: - Filter是Servlet技术的一部分,可以对请求和响应进行预处理和后处理,如登录验证、...

Global site tag (gtag.js) - Google Analytics