在使用springMVC过程经常可能出现需要在一个controller处理完成之后根据情况发送至另一个controller继续处理的情况。这种情况下一般都会使用到如下两个关键字redirect和forward。
首先,redirect和forward都可以实现从一个controller跳转至另一个controller的功能,写法如下:
redirect:/youPath?param1=key1¶m2=key2...
forward:/youPath?param1=key1¶m2=key2...
下面比较一下两者之间的差别:
(1)redirect进行重定向后浏览器中输入地址框的地址会发生变化,模拟处理流程如下:
(2)forward进行重定向后浏览器中输入地址框的地址是不会发生变化的,模拟处理流程如下:
由上述分析可知,在进行重定向时使用redirect请求到达controller时request内容已经发生了变化不再是第一次访问时的request,因此如果希望在第二个controller处理时使用第一次请求的request就不能使用redirect而应该使用forward。
(3)从上图分析可知:forward只能重定向到同一个项目的内部资源,而redirect可以重定向到外部资源。
(4)由于forward是类似于内不跳转操作而redirect需要回到浏览器再重新组织请求,因此从效率上来说forward高于redirect。而从范围上来说redirect要大于forward。
因此,在forward满足业务功能需求时建议优先使用forward,只有在forward无法满足业务需求再使用redirect。