我是根据自己的理解做的解释,至于网上都找到的基本的不同我就不再解释了。下面说说我上课时候感觉到和自己理解到请求转发和重定向的不同。
请求转发
request.getRequestDispatcher("apage.jsp").forward(request, response);
从它的forward(request, response)格式中可以看出来把必须要把 request和response 转发到另一个页面,也就是说这个页面把自己的request和response里的所有内容带到了下一个页面,也可以理解为转发前的页面和转发后的页面融合到一起成为一个共同一个页面,所以在转发后的页面中可以request可以拿到前一个页面的所有参数数值。由于它们融合成为同一个页面,页面的地址不会发生改变,都是跳转前的页面地址。
重定向
response.sendRedirect();
没带有其他的参数,它直接到了重定向的页面中没带走前一个页面中的任何参数数值。重定向到新的页面,它的地址会发生改变,会变成新的重定向后的页面的网址。
最后,我们在上课的时候学习到ssh框架的时候,struts默认的是请求转发,可见它是主要的页面的跳转方式,至于重定向只是一个特例。我做项目的时候基本很少用到重定向,不过提醒大家如果您对数据库进行了增加操作的时候一定小心,增加的页面会到达一个action中执行add方法增加数据库中的数据,然后增加成功后会跳转到新的页面,这个时候的跳转一定要用重定向。大家想想如果这个过程一直都用请求转发的话,那么你刷新页面后会发现你的数据库中的数据又增加了一条,而且跟前面的一条一模一样。为什么呢?因为它是请求转发,它的地址不变,如果你刷新的话,页面就会最初的页面刷新,那么你之前对数据库的操作又做了一遍。如果你用了重定向的话,就切断了这个链条,就不会出现这种现象了。所以在你对数据库进行更改的时候,对页面的跳转要考虑一下是否要用重定向了。一个小方法在对数据库操作的时候试试刷新页面,看看数据库的变化,如果有变化的话看看是否要用重定向。
个人理解,请大家多提意见!