一、调用方式
我们知道,在servlet中调用转发、重定向的语句如下:
request.getRequestDispatcher("new.jsp").forward(request, response); //转发到new.jsp
response.sendRedirect("new.jsp"); //重定向到new.jsp
在jsp页面中你也会看到通过下面的方式实现转发:
<jsp:forward page="apage.jsp" />
当然也可以在jsp页面中实现重定向:
<%response.sendRedirect("new.jsp"); %> //重定向到new.jsp
二、本质区别
解释一
一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:
转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部的一个方法在容器内部完成请求处理和转发动作——》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向过程:客户浏览器发送http请求——》web服务器接受后发送302状态码响应及对应新的location给客户浏览器——》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
解释二
重定向,其实是两次request
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
例子:
response.sendRedirect("loginsuccess.jsp");
请求转发是服务器内部把对一个request/response的处理权,移交给另外一个
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。传输的信息不会丢失。
例子:
RequestDispatcher dis=request.getRequestDispatcher(“loginsuccess.jsp”);
Dis.forward(request,response);
解释三
假设你去办理某个执照
重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。
转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。
分享到:
相关推荐
尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。下面是HttpServletResponse.sendRedirect方法实现的...
主要介绍了java 转发和重定向区别及实例代码的相关资料,需要的朋友可以参考下
修改root映射,通过Nginx rewrite内部跳转,设置别名alias映射实现,通过nginx的permanent 301绝对跳转实现. 1 nginx修改root映射 修改root映射实现nginx目录访问重定向是最简单的方式, 推荐采用这一种. location /...
Linux下端口转发一般都使用iptables来实现,使用iptables可以很容易将TCP和UDP端口从防火墙转发到内部主机上。如果需要将流量从专用地址转发到不在您当前网络上的机器上,可尝试另一个应用层端口转发程序rinetd,...
1. 在JavaWeb中,页面跳转有两种方式:重定向和转发。 2. 重定向是通过发送特定的HTTP响应码告知浏览器请求的资源已被移到新的URL上,浏览器接收到响应后会重新发送请求到新的URL地址,因此URL路径会改变。 3. 转发...
request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。即request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取...
3.1.1 内部局域网设计 5 3.1.2 网络边界设计 6 3.1.3 无线网络的设计 7 3.2 未来扩展设计 8 3.2.1 智能网络管理 8 3.2.2 整网网络安全联动设计 8 3.3 IP地址及VLAN规划 9 3.3.1 IP地址分配基本原则 10 3.3.2 IP地址...
突破上网限制(如在公司内部限制访问外部网络,但是开放了某些端口,可以利用开放的某些端口实现端口重定向) 远程桌面重定向 NC重定向获得Shell 2.实验环境 virtualbox虚拟机 Windows XP(作为防火墙子网客户机...
dispcter和forward的区别 RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()...2、forward与include基本上都是转发到context内部的资源,而redirect可以重定向到外部的资源,如: req.sendRedriect
如果您被迫托管在完全由第三方... 支持: 常规和XMLHttpRequests(AJAX) 所有HTTP标头无差别GET和POST动词内容类型(HTTP有效负载)无差别重定向(内部重定向被重写为相对URI) 多部分内容类型Cookies(将后端域转换
被转发到处理OG标签的内部节点服务器或嵌入式播放器 (当前)作为应用程序辅助端点的宿主/来源(嵌入式播放器,OG元标记等) 客户端使用Lambda @ Edge of CloudFlare Workers之类的东西向CDN发送请求 CDN识别User-...
RakLib RakLib代理服务器的实现,用于...服务器端有2个ip地址:外部和内部。 客户端和代理之间的通信需要外部地址 内部-用于服务器和代理之间的通信 服务器可以向代理注册 您也可以将客户端重定向到另一台服务器。
【WEB】转发(forward)和重定向(redirect)的区别 38 forward(转发): 38 redirect(重定向): 39 区别: 39 【WEB】实现会话跟踪的技术有哪些? 40 【WEB】什么是ORM 42 【反射】反射中,Class.forName和...
7 Servlet:转发和重定向 8分 8 Servlet:连接池 5分 9 Servlet:servlet(代码题目) 6分 10 Servlet:jspuserbean 5分 11 Servlet:servlet(代码题目) 10分 12 Servlet:jstl标签(代码题目) 8分 13 Servlet:...
如果不通过JSP和servlet直接下载文件的话,可以通过web.xml文件来识别文件类型来进行下载。如果要通过servlet来下载的话,可以如下所示来进行下载: 但是这样下载的话有两个缺点:一...转发: 服务器内部跳转 request
此程序使您可以托管并连接到朋友,以玩对等游戏,而无需打开或重定向任何端口。 与手动重定向端口相比,这不会给连接增加任何延迟。 您可以与不使用自动打Kong而没有兼容性问题的用户一起玩,并且可以始终将其保持...
本书是著名的操作系统内核专家Mark Russinovich和David Solomon撰写的Windows操作系统原理的最新版著作,全面和深入地阐述了Windows操作系统的整体结构以及内部工作细节。本书针对Windows Server 2003、Windows XP...
重定向 redirect4ward 提供了转发不存在的 URL 的可能性。 提供内部、外部和多语言重定向。 依赖扩展 redirect4ward 也在官方 Contao
就是内部网和外部网的主机之间不能建立直接的连接,而是要通过代理服务进行转发。代理服务器 具有用户级的身份验证,完备的日志记录和帐号管理等较包过滤器更加安全的功能。然而,许多代理机 制需要客户端修改软件或...
5.9.7 内部组标识符 165 5.9.8 通用公共订阅标识符 166 5.9.9 AMF UE NGAP 编号 166 5.9.10 UE 无线电能力 ID 166 5.10 安全方面 166 5.10.1 概述 166 5.10.2 非 3gpp 接入安全模型 167 5.10.2.1 信号安全 167 ...