`
wcxt2012
  • 浏览: 23732 次
  • 性别: Icon_minigender_1
  • 来自: 甘肃
社区版块
存档分类
最新评论

Servlet中forward(请求转发)和redirect( 重定向)总结

阅读更多

forward:请求转发
redirect: 重定向
1.在给予"/"表示当前的路径是以jsp路径为根路径来进行请求转发,属于绝对路径。 如果没有表示当前路径是以当前客户端发送请求时的路径进行请求转发,属于相对路径。
2.从这里的请求转发可以看出,servlet主要负责的并不是现实html代码,而是为了处理具体的请求转发。大致方法获得RequestDisapatcher对象 然后用其forward方法来进行请求转发:
RequestDisapatcher rd=reqest.getRequestDisapatcher();
rd.forward(req,resp); //用这里的方法来进行转发
 
3.HttpServletResponse 对象的SendRequest(String location)方法称作重定向,如果location地址前面加上“/ ”,则表示相对于servlet容器的根来请求,即http://localhost:8080 ,如果location地址前没有加上“/”,则表示当前请求的URI来寻找地址(就是当前的项目目录中)。
4.RequestDispather的forward(request,response)方法称为请求转发。
5.请求转发和重定向的区别:
a.请求转发:整个过程在同一个请求当中。所以在用getParameter的时候的值可以随时拿到。
b. 重定向:实际上客户端会向服务器发送两个请求。第一个请求是请求serlvet,第二个请求是服务器将结果发送到请求页面。所以getParameter是不可能得到同一个请求参数的。所以最总是是用response对象中的sendRedirect方法来重定向,也即服务器响应对象来进行重定向的.
c.RequestDisapatcher是通过调用HttpServletRequest对象的getRequestDisapatcher方法得到的。是属于请求对象的方法。
d.sendRedirect方法是属于HttpServletResposne对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。


6.重定向在firebug中的会有两个请求 而请求转发只有一个。本源就是请求个数。
 
前后两个页面 有数据传递 用请求转发,没有则用重定向。
比如servlet查询了数据需要在页面显示,就用请求转发。
比如servlet做了update操作跳转到其他页面,就用重定向。

=======================================================

1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.


redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.

redirect:不能共享数据.

3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.


redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.


4.从效率来说
forward:高.


redirect:低.


本质区别


解释一

一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:

转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

解释二

重定向,其实是两次request,

第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

例子:

请求转发是服务器内部把对一个request/response的处理权,移交给另外一个

对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。

解释三:

转发是服务器行为,重定向是客户端行为。 

两者的内部机制有很大的区别:   
1 请求转发只能将请求转发给同一个WEB应用中的组件,
而重定向还可以重新定向到同一站点不同应用程序中的资源,甚至可以定向到一绝对的URL。   
2 重定向可以看见目标页面的URL,
转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。  
3 请求响应调用者和被调用者之间共享相同的request对象和response对象,
重定向调用者和被调用者属于两个独立访问请求和响应过程。   
4 重定向跳转后必须加上return,要不然页面虽然跳转了,
但是还会执行跳转后面的语句,
转发是执行了跳转页面,下面的代码就不会在执行了。 

分享到:
评论

相关推荐

    servlet请求转发、重定向、包含

    Servlet请求转发、重定向和包含是Servlet中处理客户端请求的重要技术,它们都涉及到如何有效地管理用户请求和页面跳转,但各自有不同的特性和应用场景。 1. **请求转发(Request Forward)** - 请求转发是在服务器...

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

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

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

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

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

    总结来说,转发和重定向是Java Servlet中处理请求路由的两种重要手段,它们各有优缺点,选择哪种取决于具体需求,比如是否需要保持请求状态、URL是否需要改变以及对性能的影响等因素。在实际开发中,理解这两者的...

    转发和重定向的区别

    在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的页面跳转方式,它们虽然在效果上看似相似,但其实有着本质的区别。理解这两种技术的工作原理及其应用场景对于优化应用程序的性能和用户体验至关...

    直接请求转发(Forward)和间接请求转发(Redirect)两种区别.docx

    主要分为直接请求转发(Forward)和间接请求转发(Redirect)。这两种转发方式在处理请求时有着显著的区别。 直接请求转发(Forward): 直接请求转发是服务器内部的资源调度,用户在浏览器中只会看到最初的请求...

    请求转发与重定向详解代码

    在Web开发中,请求转发(Request Forward)和重定向(Redirect)是两种常见的处理客户端请求的方式,它们在处理用户请求并展示相应页面时起到关键作用。这篇文章将深入讲解这两种技术的工作流程,以及它们在实际应用...

    JavaWeb中的 请求转发 和 重定向.docx

    在JavaWeb开发中,请求转发和重定向是两种常见的客户端请求处理方式,它们都是用于将一个请求从一个Servlet传递到另一个Servlet或者从一个资源跳转到另一个资源。这两种方法虽然都可以实现页面间的跳转,但它们的...

    请求转发和重定向的区别共1页.pdf.zip

    在Web开发中,请求转发和重定向是两种常见的服务器...总结来说,请求转发和重定向在Web应用中各有优势,选择哪种方式取决于具体的需求和应用场景。理解它们的工作原理和差异,对于优化网站性能和提升用户体验至关重要。

    重定向和转发的区别

    在Web开发中,经常需要用到重定向(Redirect)与转发(Forward)这两种控制页面跳转的技术。尽管它们都能实现页面之间的跳转,但在具体的应用场景和技术实现上却有着本质的不同。下面将从多个角度来详细阐述两者的...

    request和response实现跳转和重定向的区别

    2. 请求转发(Forward): 请求转发是服务器内部的一种操作,只在服务器端进行,不涉及客户端的重定向。它通过`Request`对象的`forward()`方法实现,服务器接收到请求后,不直接处理,而是将请求传递给另一个内部...

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

    文中详细介绍了两种请求转发方式的原理和区别,包括请求转发的含义、Forward转发请求的原理、Redirect转发请求的原理等。 请求转发的含义 在JAVA web开发中,请求转发是指服务器端将用户的请求转发给其他信息资源...

    forward与redirect区别

    - 浏览器向服务器发送请求后,服务器接收到请求并处理,然后直接将请求转发到指定的内部资源,如一个JSP页面或Servlet。 - 转发可以在同一个Web应用程序内进行,甚至可以访问受保护的目录,如`WEB-INF`下的资源。 - ...

    Springboot转发重定向实现方式解析

    Springboot 转发重定向是指在 Springboot 框架中,如何实现请求的转发和重定向。下面将详细介绍 Springboot 转发重定向的实现方式。 一、Springboot 转发 在 Springboot 中,转发可以使用两种方式实现:使用 ...

    重定向与转发

    在 Web 应用程序中,重定向(Redirect)和转发(Forward)是两个常见的机制,用于实现页面的跳转和数据的传递。它们之间有着本质的区别,但它们都是实现页面跳转和数据传递的重要手段。 一、转发(Forward) 转发...

    idea做一个带有验证码的登录界面,包函forword转发和sendRedirect重定向方法

    在这个过程中,`forward`和`redirect`是两种常见的服务器端处理用户请求的方法。本文将详细讲解如何使用IntelliJ IDEA(Idea)来实现这个功能,并探讨它们的工作原理。 首先,让我们了解一下`forward`和`redirect`...

    jsp forward与redirect实探

    当我们需要在不同的页面之间导航时,`forward`和`redirect`是两种常见的处理请求转发和重定向的方法。本文将深入探讨这两种机制及其区别。 首先,`forward`是通过服务器端内部跳转实现的。它使用`RequestDispatcher...

    java web-转发、重定向(csdn)————程序.pdf

    在Java Web开发中,转发(Forward)和重定向(Redirect)是两种常见的请求处理方式,它们在处理客户端请求和服务器响应时有着不同的机制和应用场景。 1. **转发(Forward)** - **原理**:转发是在服务器端内部...

Global site tag (gtag.js) - Google Analytics