getRequestDispatcher是服务器内部跳转,地址栏信息不变,只能跳转到web应用内的网页。
sendRedirect是页面重定向,地址栏信息改变,可以跳转到任意网页。
1.getRequestDispatcher分成两种:
a、可以用request调用
b、也可以用getServletContext()调用
不同的是request.getRequestDispatcher(url)的url可以是相对路径也可以是绝对径。
而this.getServletContext().getRequestDispatcher(url)的url只能是绝对路径。
request.setAttribute("lover", "tom");
request.getSession().setAttribute("lovered", "joe");
request.getRequestDispatcher("/third?name=jay").forward(request, response);
或
request.getRequestDispatcher("third?name=jay").forward(request, response);
或
this.getServletContext().getRequestDispatcher("/third?name=jay").forward(request, response);
注:request.getRequestDispatcher(url)之所以可以使用相对路径,是因为在getRequestDispatcher(url)方法中封装了ServletContext.getRealPath()以获得相应的项目根路径,再通过字符串相加,从而可以获得一个完整的路径。
2.sendRedirect只能用response调用,可以用相对路径(直接用),也可以用相对路径(需加应用路径)
request.setAttribute("lover", "tom");
request.getSession().setAttribute("lovered", "joe");
response.sendRedirect("third?name=jay");
或
response.sendRedirect(request.getContextPath()+"/third?name=jay");