10014---JavaWeb基础--请求重定向与请求转发

转载 2015年11月18日 00:23:27
RequestDispatcher接口
forward方法实现请求转发
请求转发的运行流程
sendRedirect方法实现请求重定向
请求重定向的运行流程
请求重定向与请求转发的比较
 
RequestDispatcher接口
RequestDispatcher实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源调用的资源(例如,ServletHTML文件、JSP文件等),
  并可以通过其中的方法将客户端的请求转发给所包装的资源。
RequestDispatcher接口中定义了两个方法:forward方法和include方法。
forwardinclude方法接收的两个参数必须是传递给当前Servletservice方法的那两个ServletRequestServletResponse对象,
  或者是对它们进行了包装的ServletRequestWrapperServletResponseWrapper对象。
获取RequestDispatcher对象的方法:
  --ServletContext.getRequestDispatcher参数只能是以“/”开头的路径) --
  --ServletContext.getNamedDispatcher
  --ServletRequest.getRequestDispatcher参数可以是不以“/”开头的路径

1). 本质区别: 请求的转发只发出了一次请求, 而重定向则发出了两次请求.

具体:

①. 请求的转发: 地址栏是初次发出请求的地址.
       请求的重定向: 地址栏不再是初次发出的请求地址. 地址栏为最后响应的那个地址
      
②. 请求转发: 在最终的 Servlet 中, request 对象和中转的那个 request 是同一个对象.
       请求的重定向: 在最终的 Servlet 中, request 对象和中转的那个 request 不是同一个对象.      
  
③. 请求的转发: 只能转发给当前 WEB 应用的的资源
       请求的重定向: 可以重定向到任何资源.
      
④. 请求的转发: / 代表的是当前 WEB 应用的根目录  http://localhost:8080/FP/
       请求的重定向: / 代表的是当前 WEB 站点的根目录.  http://localhost:8080/FP/

		RequestDispatcher dis = request.getRequestDispatcher("/testServlet");
		dis.forward(request, response);
// 
response.sendRedirect("/testServlet");

请求重定向与请求转发的比较

RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;
 而HttpServletResponse.sendRedirect方法还可以重定向到同一个站点上的其他应用程序中的资源,
 甚至是使用绝对URL重定向到其他站点的资源。
如果传递给HttpServletResponse.sendRedirect方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;
  如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。
调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,
  由初始的URL地址变成重定向的目标URL;调用RequestDispatcher.forward方法的请求转发过程结束后,
  浏览器地址栏保持初始的URL地址不变。
HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,
  响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;
   RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,
    浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。
RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,
   它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与
    被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。


 

 

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

请求转发: 请求转发,即request.getRequestDispatcher().forward(),是一种服务器的行为,客户端只有一次请求,服务器端转发后会将请求对象保存,地址栏中的URL地址...
  • u012877472
  • u012877472
  • 2016年03月04日 18:48
  • 22327

深入浅出Java 重定向和请求转发的区别

客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的stude...
  • lishehe
  • lishehe
  • 2014年04月08日 07:58
  • 54223

重定向和请求转发区别

请求转发与重定向的区别 2011-03-07 22:56 1907人阅读 评论(0) 收藏 举报 浏览器服务器urlwebweb服务jsp 重定向与转发的区别: 1.重定向访问...
  • u010226454
  • u010226454
  • 2014年12月01日 17:04
  • 4035

请求包含,转发,重定向的区别

当浏览器请求一个jsp,servlet时,会调用相应的service方法 注意:在同一个servlet中无法   字节流和字符流共存,服务器对于请求只响应一次给浏览器的信息,只会选择一个流一次性输出...
  • jrdgogo
  • jrdgogo
  • 2016年07月24日 22:49
  • 1407

重定向与请求转发的区别及什么时候使用

重定向与请求转发的区别 一 转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程: 转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部...
  • ResignJUN
  • ResignJUN
  • 2016年10月14日 22:48
  • 4630

Servlet 请求转发和重定向

servlet请求转发与重定向
  • hxm_Code
  • hxm_Code
  • 2016年01月20日 13:49
  • 2004

struts2 中请求转发与请求重定向方法

一。Chain Result: 这个result调用另外的一个action,连接自己的拦截器栈和result。 actionName (默认) - 被调用的action的名字namespace - ...
  • a327736051
  • a327736051
  • 2015年12月09日 19:36
  • 4366

Jsp&Servlet 重定向、请求转发与绝对路径的问题

一、重定向:通知浏览器重新发送至xxx的请求。 1、发生场景: (1)response.sendRedirect("xxx"); (2)JSP页面的 src 属性; (3)JSP表单的 act...
  • zzz1192993261
  • zzz1192993261
  • 2017年03月26日 19:32
  • 1351

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

重定向:地址栏有变化,一个Servlet,是二个请求 转发:地址栏没变化,至少2个Servlet,是一个请求(留头不留体,意思就是最好不要体(因为你都去叫别人帮忙了,你还做点事,那还不如不叫别人帮...
  • u012110719
  • u012110719
  • 2015年03月27日 15:21
  • 1489

转发和重定向 HTTP请求方式

重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送...
  • Angel_G
  • Angel_G
  • 2016年10月14日 19:31
  • 778
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:10014---JavaWeb基础--请求重定向与请求转发
举报原因:
原因补充:

(最多只允许输入30个字)