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

先来两张图,方便理解:

可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源

而请求转发时,类似于是服务器自己向自己发了一个跳转,然后将结果直接给游览器,这也是问什么游览器会不改变url地址。下面是具体总结他们的区别

一、response.sendRedirect(url)-服务器将新url发送给游览器,游览器再根据新url请求

Request.getRequestDispatcher(url).forward(request,response);请求转发到指定url(服务器内部跳转url然后将结果发给游览器)

二、response.sendRedirect(url)--客户端跳转

Request.getRequestDispatcher(url).forward(request,response)--服务器跳转

三、response.sendRedirect(url)--跳转到指定url地址后,上个页面的请求会结束,request对象会消亡,数据会消亡。

Request.getRequestDispatcher(url).forward(request,response)--内部跳转,request对象一直存在

四、response.sendRedirect(url)--网址会改变

Request.getRequestDispatcher(url).forward(request,response)--以游览器角度来看,他只是发送一个request然后收到一个response,所以url不变

五、response.sendRedirect(url)--传参数需要在url后加参数。

Request.getRequestDispatcher(url).forward(request,response)-传参数可以操作request对象方法setAttribute(“name”,value)

六、response.sendRedirect(url)-可以定位到任意的网址

Request.getRequestDispatcher(url).forward(request,response)-只能定位到服务器资源

七、response.sendRedirect(url)--可以重定向有frame的jsp文件

Resquest.getRequestDispatcher(url).forward(request,response)-不可以重定向有frame的jsp文件,可以定向到有frame的html文件,只有在客户端没有输出时才可以调用forward方法,如果当前页面缓冲区不是空的,那么该句可能不起作用,由于这种提交不会改变url地址,刷新会重复提交。

时间: 2024-12-17 00:05:24

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

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中的

请求转发:MVC设计模式、细节、请求域属性的编程实例、请求重定向和请求转发的区别

MVC设计模式将一次请求的响应过程分成三个功能模块(一般称之为层)来协同完成,这三个模块分别是Model(模型层).View(视图层).Controller(控制层). Model是可作为JavaBean使用的业务对象:View是负责创建显示界面的JSP页面:Controller通常是一个接收用户请求的Servlet程序,它根据请求创建相应的model对象和调用model对象的业务方法,最后再选择一个View去创建网页文档内容并回送给客户端. Controller调用RequestDispatc

举例说明重定向和请求转发的区别

重定向 HttpServletResponse对象的sendRedirect(java.lang.String location)方法称作重定向. 如果location地址前面加上“/”,则表示相对于Servlet容器的根来请求,比如http://localhost:8080:如果location地址前面没有加上“/”,则表示相对于当前请求的URI来寻找地址. 请求转发 RequestDispatcher的:forward(ServletRequest request, ServletRespo

【Servlet】深入浅出Java重定向和请求转发

import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; import javax.servlet.*; import com.bjpowernode.exam.model.*; import com.bjpowernode.exam.manager.*; public class SearchStudentServlet extends HttpServlet { public

jsp之 ---- 页面重定向和请求转发(笔记之深度说明)

1.  HttpServletResponse对象的sendRedirect(String location)方法称作重定向. 如果location地址前面加上“/”,则表示  相对于Servlet容器的根来请求. 即 http://localhost:8080,如果location 地址前米有加上'/',则表示相对于当前请求的URL来寻找地址.                              response.sendRedirect("my.jsp");   (无法获取前

HTTP中的重定向和请求转发的区别

一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下: request.getRequestDispatcher("new.jsp").forward(request, response);   //转发到new.jsp response.sendRedirect("new.jsp");   //重定向到new.jsp 在jsp页面中你也会看到通过下面的方式实现转发: <jsp:forward page="apage.jsp"

Servlet中请求重定向和请求转发和include

响应的重定向 response.sendRedirect("ShowMSgSerlet1");//请求重定向 会将后面的浏览器的url改变. 请求转发 RequestDispatcher rd=request.getRequestDispatcher("../index.jsp");//创建对象 rd.forward(request, response);//将对象进行转发 不会浏览器的url改变 include RequestDispatcher rd=reque

Jsp 重定向、请求转发

请求转发:request.getRequestDispatcher(URL地址).forward(request, response) 原理: 客户端发送请求,Servlet1做出处理. Servlet1调用sendReadirect()方法,将请求转发给Servlet2来处理请求,为客户端服务. Servlet2对客户端浏览器做出响应. 请求转发允许把请求转发给同一应用程序中的其他Web组件.这种技术通常用于Web应用控制层的Servlet流程控制器,它检查HTTP请求数据,并将请求转发到合适

请求重定向和请求转发的区别

1)转发只能将请求给同一个WEB应用中的组件:重定向可以重定向到一个站点上的其它应用程序的资源,还可以使用绝对URL重定向到其它站点的资源. 2)重定向需要的路径是针对浏览器的,也就是说相对URL以"/"开头,它是相对于整个WEB站点的根目录:转发需要的路径是相对于服务器的,也就是说相对URL以"/"开头,它是相对于当前WEB应用程序的根目录. 3)重定向浏览器地址栏发生变化:转发浏览器地址栏不发生变化.这是因为重定向对浏览器的请求直接作出响应,然后让浏览器去访问它