在web开发过程中经常会面对servlet之间的跳转,通常servlet之间的跳转有两种方式:

request.getRequestDispatcher("路径").forward(request, response);

response.sendRedirect("路径");

之前对这两种方式跳转的理解总是一知半解,直到今天遇到一些问题才在网上查了一下,并整理如下:

1、response.sendRedirect("路径");
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:
response.sendRedirect("http://6883741.blog.51cto.com/addblog.php");

跳转之后路径会改变,如果传值的话,只能是在url中带parameter或者放在session中,不能使用request.setAttribute。

2、request.getRequestDispatcher("路径").forward(request, response);

页面的路径是相对路径。路径只能局限于本web应用中;

跳转之后路径不会改变,依然是你当前访问的servlet,这就有一个问题:

如果我们用form表单将jsp页面的数据提交到一个servlet,并在这个servlet中将数据存放到session中,然后用forward方式跳转到提交数据的jsp,并在那个页面将数据显示出来。这时就发现每刷新一次页面数据就会增加一条。这是因为当前路径并没有变化,我每刷新一次就相当于访问了一次servlet,所以就会增加一条数据。

用forward方式路径跳转传值的话有三种方式::url中带parameter,session,request.setAttribute。