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

Servlet的两种跳转区别

    博客分类:
  • Java
阅读更多
在servlet中,一般跳转都发生在doGet, doPost等方法里面。

一、原理中文JAVA技术网
1) redirect 方式
;F'R s/i#g9G0response.sendRedirect("/a.jsp"); 中文JAVA技术网
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:

跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。public void doPost(HttpServletRequest request,HttpServletResponse response)    throws ServletException,IOException中文JAVA技术网KM.FB3MY
{
} response.setContentType("text/html; charset=UTF-8");
        response.sendRedirect("/index.jsp");
}

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

跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute
这种方式是在服务器端作的重定向。服务器往client 发送数据的过程是这样的:服务器在向客户端发送数据之前,是先将数据输出到缓冲区,然后将缓冲区中数据发送给client端。什么时候将缓冲区里的数据发送给client端呢?(1)当对来自client的request处理完,并把所有数据输出到缓冲区,(2)当缓冲区满,(3)在程序中调用缓冲区的输出方法out.flush()或response.flushbuffer(),web container才将缓冲区中的数据发送给client。
这种重定向方式是利用服务器端的缓冲区机制,在把缓冲区的数据发送到客户端之前,原来的数据不发送,将执行转向重定向页面,发送重定向页面的数据,重定向调用页的数据将被清除。如果在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么这种重定向方式将不起作用,这一点应该特别注意。

public void doPost(HttpServletRequest request,HttpServletResponse response)   throws ServletException,IOException
{
response.setContentType("text/html; charset=UTF-8");
        ServletContext sc = getServletContext();
        RequestDispatcher rd = null;
        rd = sc.getRequestDispatcher("/index.jsp")
{
        rd.forward(request, response);
}
二、区别.
1、forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法只能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法可以重定向到任何URL, 因为这种方法是修改http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变。
2、forward重定向将原始的HTTP请求对象(request)从一个servlet实例传递到另一个实例,而采用sendRedirect方式两者不是同一个application。
3、基于第二点,参数的传递方式不一样。forward的form参数跟着传递,所以在第二个实例中可以取得HTTP请求的参数。sendRedirect只能通过链接传递参数,response.sendRedirect(“login.jsp?param1=a”)。
4、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不能这样处理相对路径。
java



response.sendRedirect(); 中文JAVA技术网"{
和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(),如果有,页面不会跳转。
AJ,{ 跳转后浏览器地址栏变化 [
此语句后面的语句执行完成后才会跳转
<jsp:forward page="" />
此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: forward() not allowed after buffer has committed.
B0at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)
at
at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836) 中文JAVA技
跳转后浏览器地址栏不变,但是只能跳到当前主机下 中文JAVA技术网3n8VY"B.p Xd
此语句后面的语句执行完成后才会跳转

来自:http://hi.baidu.com/ccst2005/blog/item/df3e76c23a20b91e0ef4778a.html

他们的区别是:
response.sendRedirect是向客户浏览器发送页面重定向指令,浏览器接收后将向web服务器重新发送页面请求,所以执行完后浏览器的url显示的是跳转后的页面。跳转页面可以是一个任意的url(本服务器的和其他服务器的均可)。
RequestDispatcher.forward则是直接在服务器中进行处理,将处理完后的信息发送给浏览器进行显示,所以完成后在url中显示的是跳转前的页面。在forward的时候将上一页面中传送的 request和response信息一同发送给下一页面(而response.sendRedirect不能将上一页面的request和 response信息发送到下一页面)。由于forward是直接在服务器中进行处理,所以forward的页面只能是本服务器的。
分享到:
评论

相关推荐

    servlet跳转的几种情况

    Servlet 跳转可以分为 Redirect 跳转和 Forward 跳转两种,JSP 跳转也可以使用这两种方式,但是需要注意 JSP 的特殊性。了解 Servlet 跳转的几种情况,可以帮助开发者更好地控制程序的流程和数据传递。

    servlet实现的页面跳转

    页面跳转主要有两种方式:请求转发(Request Forwarding)和重定向(Redirecting)。 1. 请求转发(Request Forwarding): 请求转发发生在服务器端,使用`RequestDispatcher`的`forward()`方法。在这种情况下,...

    jsp与Servlet跳转实例

    在Web开发中,JSP(Java Server Pages)和Servlet是两个重要的技术组件,它们共同协作来处理客户端请求并生成动态网页内容。本文将详细解析一个具体的案例——如何通过JSP与Servlet的有效结合实现信息提交与页面跳转...

    Servlet跳转方式sendReDirect

    Servlet是Java Web应用程序的核心组件...总的来说,理解这两种跳转方式及其差异对于构建高效、健壮的Servlet应用程序至关重要。在设计Web应用程序时,根据实际需求选择合适的方式可以提高用户体验和应用程序的灵活性。

    servlet的跳转

    在Servlet中,跳转分为两种主要类型:请求转发(Request Forward)和重定向(Redirect)。这两种方法都是在服务器端完成的,但它们的工作机制和效果有所不同。 1. 请求转发(Request Forward) - **概念**:请求...

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

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

    servlet跳转页面的几种方法

    本篇文章将详细讲解Servlet中跳转页面的两种主要方法:redirect(重定向)和forward(转发),以及在JSP中如何实现类似操作。 1. **Servlet中的跳转** - **Redirect(重定向)** 重定向是通过`response....

    jsp与Servlet跳转

    - 在Java Web应用中,页面跳转通常有两种方式:重定向(Redirect)和转发(Forward)。 - **重定向**:客户端(浏览器)会收到一个新的HTTP响应,并被指示去访问新的URL。这意味着客户端会发送一个新的请求到...

    java servlet 几种页面跳转的方法

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

    Web_2_Servlet的基本使用和跳转1

    Servlet 有两种配置方式: 1. 使用 web.xml 文件配置 Servlet。 2. 使用_annotations_配置 Servlet。 Servlet 实现页面跳转 Servlet 可以实现页面跳转,跳转的方式有多种,例如: 1. 使用 HttpServletResponse ...

    Servlet详解.pdf

    在实际开发中,经常需要从JSP页面跳转到Servlet来处理业务逻辑。可以通过以下方式实现: - 在JSP页面中使用`&lt;form&gt;`标签提交表单数据到Servlet。 - 使用`&lt;a&gt;`标签或JavaScript发起AJAX请求调用Servlet。 #### 4. ...

    JSP页面的五种跳转方法

    JSP页面的五种跳转方法是Web开发中常见的页面间导航技术,它们允许开发者在用户请求之间灵活地转移控制流。以下是这五种方法的详细介绍: 1. **RequestDispatcher.forward()** - `RequestDispatcher.forward()`...

    jsp+Servlet实现简单的登陆

    本示例探讨的是如何使用这两种技术来实现一个简单的登录功能,这是一个基础但关键的功能,对于任何Web应用程序来说都是必不可少的。 首先,让我们深入了解一下Servlet。Servlet是Java编写的小型服务器端程序,它...

    Structs2 vs Servlet

    在Java Web开发中,Structs2和Servlet是两种常见的技术,它们都在构建MVC(Model-View-Controller)架构的应用程序中发挥着重要作用。这里我们将深入探讨Structs2与Servlet的差异,以及如何通过简单的入门程序来理解...

    北大青鸟 Servlet 基础 PPT

    处理HTTP请求的方法主要有两种:GET和POST。GET请求通常用于获取资源,其参数会显示在URL中,而POST请求则常用于向服务器提交数据,如表单数据,这些数据不会显示在URL中,安全性相对较高。 页面跳转在Web开发中也...

    servlet实现登录动能

    在Java Web开发中,Servlet是一种用于扩展服务器功能的Java类,它可以处理HTTP请求并返回响应。本项目"Servlet实现登录功能"旨在通过Servlet技术构建一个基础的用户登录系统。在这个项目中,我们将涵盖以下几个关键...

    jsp 购物车源码 servlet

    本资源是针对初学者设计的一个基于JSP(JavaServer Pages)和Servlet的简单购物车源码,旨在帮助学习者深入理解这两种技术在实际Web开发中的应用。JSP和Servlet是Java Web开发中不可或缺的组件,它们共同构建了动态...

    jsp和servlet中实现页面跳转的方式实例总结

    在Java Web开发中,JSP(JavaServer Pages)和Servlet是两种常见的技术,它们用于创建动态网页。在处理用户请求时,有时需要实现页面跳转,以实现不同页面间的交互。本文将详细介绍在JSP和Servlet中实现页面跳转的...

    servlet简介(入门必备)

    Servlet是Java Web开发中的核心组件,它是一种服务器端的Java应用程序,主要用于扩展Web服务器的功能,处理客户端发送的HTTP请求并生成响应。这篇文档将带你走进Servlet的世界,了解其基本概念、工作原理以及如何...

Global site tag (gtag.js) - Google Analytics