导读:类似于response.sendRedirect(request.getContextPath()+"/servlet/item/SearchItemServlet");和request.getRequestDispatcher("/basedata/item_add.jsp").forward(request, response);的用法,在drp的项目中,或者说在之前的项目中,用的都很多。一个是重定向,一个是转发,那么它们之间到底有什么区别呢?现在根据项目,总结一下。
一、基础概念
1.1,重定向:
重定向会改变浏览器的地址栏;它不共享request;可以重定向到任意的URL。
1.2,转发:
转发不会改变浏览器的地址栏;共享同一个request;只能在同一个web应用中使用。
理解:对于转发和重定向的理解,就跟自主找工作和外包似的。自主找工作就是重定向,外包就是转发。重定向:求职A(简历)——〉请求B公司职位——〉Sorry,你不行(response)——〉 求职A——〉请求C公司职位——〉response。在这个过程中,当请求C公司的时候,求职A在B公司面试的内容就无法有效的传递给C。这个时候,外包这个转发就来了。求职A(简历)——〉外包B——〉C公司(sorry)——〉外包B(告诉求职A,等着,我给你转发下家公司)——〉D公司——〉求职A。在这个过程中,外包这个转发者,会一直将求职A的信息,转发到各个公司,而不用再通过求职A去获取信息了。
二、应用场景
重定向:不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使HttpServletResponse.sendRedirect 方法。
转发:对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用 HttpServletRequest.setAttribute 方法传递预处理结果,那就应该使用RequestDispatcher.forward 方法。
总结:主要的区别是一个request作用域的不同,简单来说,如果在页面跳转的时候,需要传递一些参数,那么最好是选用转发,比如说编辑页面的跳转;那么如果在页面跳转的时候,不需要传递参数,而且要跳转的页面不属于同一个web应用,就应该选择重定向。一般来说,转发的效率高于重定向。