response.sendRedirect(url)与request.getRequestDispatcher(url).forward(request,response)的区别

response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参数,如:
url?id=1。
request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而sendRedirect()会新建request对象,所以上一个request中的数据会丢失。
更具体来说就是这样的:
redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器,然后服务器发新的response给浏览器。这时页面收到的request是一个新从浏览器发来的。
forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response。这时页面收到的request不是从浏览器直接发来了,可能己经用request.setAttribute在request里放了数据.在转到的页面可直接用request.getAttribute获得数据。

运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何URL。

在asp.net里,Response.Redirect和Server.Transfer这二者的区别也如是。

原文地址:https://www.cnblogs.com/buguge/p/9179264.html

时间: 2024-08-27 11:23:12

response.sendRedirect(url)与request.getRequestDispatcher(url).forward(request,response)的区别的相关文章

javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别

先来两张图,方便理解: 可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源 而请求转发时,类似于是服务器自己向自己发了一个跳转,然后将结果直接给游览器,这也是问什么游览器会不改变url地址.下面是具体总结他们的区别 一.response.sendRedirect(url)-服务器将新url发送给游览器,游览器再根据新url请求 Request.getRequestDispatcher(url).forward(reques

response.sendRedirect乱码问题终极解决方案

读到这篇文章的同学想必是在response.sendRedirect乱码问题上出现了迷惑,只好问度娘了.但是如果度娘能把我们的迷惑完全解释清楚,也就不存在这篇文章了.既然本文就像标题那样吹下了大牛,闲话少叙看看笔者是如何把这个牛一步步的吹下去的. 在JAVAEE开发时经常会遇到中文乱码问题,对于老程序员来说也是一件比较头疼的问题.我们通常是遇到问题时上网搜一搜,有时候运气好问题也就解决了,可是很少去从本质上去关注问题为什么会产生?到底是怎么解决的? 首先来看第一个问题,为什么会产生乱码?乱码是指

forward 与 redirect 的区别

一.请求转发(forward) 又叫做 直接转发方式,客户端和浏览器都 只发出一次请求.Servlet.HTML.JSP或其他信息资源,由 第二个信息资源响应该请求,在请求对象request,保存的对象对于每个信息资源是共享的. 语法: request.getRequestDispatcher(path).forward(request, response); 特点: 1.地址栏中的地址[不会]改变,通常看作是服务端的跳转 2.只有一个请求 3.资源是共享的 //也就是说两个Servlet中可以

request请求转发和request域运用

1.请求转发 1.概述:让服务器跳转到另一个资源上 2.方法     1.request.getRequestDispatcher("跳转资源路径").forward(request, response); 2.域对象 1.作用:实现servlet与servlet之间的数据传输功能 2.例如:Request本质上就是一个域对象, 域对象就是一个容器. 3.域对象的方法 1.request.setAttribute(key,value);往request对象中存数据 2.requet.g

转response.sendRedirect()与request.getRequestDispatcher().forward()区别

JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是二者是有很大的区别的,分条来说,有以下几点: ①response.sendRedirect(url)-----重定向到指定URL request.getRequestDispatcher(url).forward(request,response) -----请求转发到指定URL ②response

response.sendRedirect()与request.getRequestDispatcher("/index.jsp").forward(request, response)两者辨析

知识点轮廓 一 辨析response.sendRedirect()与request.getRequestDispatcher("/index.jsp").forward(request, response) 二 辨析请求转发与重定向异同问题[知识点总结] 第一部分: JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是二者是有很大的区别的,

转 让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别

JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是二者是有很大的区别的,分条来说,有以下几点: ①response.sendRedirect(url)-----重定向到指定URL request.getRequestDispatcher(url).forward(request,response) -----请求转发到指定URL ②response

response.sendRedirect()与request.getRequestDispatcher().forward()区别

JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是二者是有很大的区别的,分条来说,有以下几点: ①response.sendRedirect(url)-----重定向到指定URL request.getRequestDispatcher(url).forward(request,response) -----请求转发到指定URL ②response

JSP中页面跳转response.sendRedirect()和request.getRequestDispatcher()的区别

Java Web开发中,采用MVC模式的时候,在控制器完成模型的调用之后会选择界面对用户响应,用常有2种方式 1,通过response对象的sendRedirect方法重定向: response.sendRedirect("login.jsp"); 2,通过RequestDispatcher对象的forward方法: <!--请求转发--> RequestDispatcher rd = request.getRequestDispatcher("login.jsp