JavaWeb --- Servlet request of the difference between forward and redirect

请求转发 —— HttpServletRequest.getRequestDispatcher.forward(hreq,hresp)
————————ServletContext.getRequestDispatcher().forward(hreq,hresp)

Redirect - HttpServletResponse.sendRedirect

Here Insert Picture DescriptionGreen forwards the request HttpServletRequest.RequestDispatcher.forward:

		叫“浏览器”的人写信找servlet借钱,
		servlet没有钱,
		于是servlet找index.jsp借了一些钱,
		甚至还可以加上自己的一些钱,
		然后再将这些钱汇给了“浏览器”。
		
		可见,“浏览器”只发 出了一封信和收到了一次回复,
		他只知道从servlet那里借到了钱,并不知道有一部分钱出自index.jsp之手。
		【在服务器端内部将请求转发给另外一个资源index.jsp,
		"浏览器"只知道发出了请求并得到了响应结果,
		并不知道在服务器程序内部发生了转发行为。】

Red respond to redirect HttpServletResponse.sendRedirect:

					有个叫“浏览器”的人  写信找servlet借钱,
					servlet回信说没有钱,让“浏览器”去找index.jsp借,
					并将index.jsp现在的通信地址告诉给了“浏览器”。
					于是,“浏览器”又按servlet提供通信地址给index.jsp写信借钱,
					index.jsp收到信后就把钱汇给了“浏览器”。					
			  
			  		可见,“浏览器”一共发出了两封信和收到了两次回复,
			 		“浏览器”也知道他借到的钱出自index.jsp之手。

summary:

	1.转发:服务器行为 				         重定向 :客户端行为;
	2.转发:浏览器URL的地址栏不变  	         重定向:浏览器URL的地址栏改变;
	3.转发:浏览器只做1次访问请求,得到1次响应    重定向:浏览器做了至少2次的访问请求,得到至少2次响应;
	4.转发:传输信息不丢失                      重定向:传输信息丢失【在Spring3.1版本以后,我们可以通过Flash属性,解决重定向时传值丢失的问题。详见https://blog.csdn.net/liubin5620/article/details/79922692】
	5.转发  快于 重定向【毕竟重定向 还得要浏览器再发请求】
								——so 当2个都可用时优选 转发
	6.转发 仅可访问 当前web的程序
								——so 当访问外部web只能选 重定向
Published 12 original articles · won praise 7 · views 618

Guess you like

Origin blog.csdn.net/weixin_45881192/article/details/104083064