1、两者的目的是为了实现HttpServletRequst对象的共享
2、HttpServletResponse.sendRedirect(),容器将把新的URL发送给客户端,客户端将会发生一次新的请求,这样所有的放在HttpServletRequest中的request attributes对象将会失效。
而RequestDispatcher.forward()是在容器内发生的,并没有把URL发送给客户端,没有生成一次新的请求,因此原来所有放在HttpServletRequest中的request attributes对象将不会失效。
3、URL不同
Redirect因为是客户端,因此是绝对的路径;
String contextPath = req.getContextPath( );
String redirectStr = contextPath + "/result.jsp?username=foo&password=bar";
resp.sendRedirect(resp.encodeRedirectURL(redirectStr));
而Forward因为是在容器内,因此是相对的路径。
String forwardStr = "/result.jsp?username=foo&password=bar";
RequestDispatcher dispatcher = req.getRequestDispatcher(forwardStr);
dispatcher.forward(req, resp);