RequestDispatcher的forward(request, response)称为请求转发。
请求转发,保存了ServletRequest中setAttribute的参数,可以使用这种方法传递参数:
req.setAttribute("username", "arthinking");
RequestDispatcher rd = req.getRequestDispatcher("message.jsp");
rd.forward(req, resp);
在同一个请求里面,可以使用getParameter方法获取setAttribute方法设置的参数。
转发实际上是属于请求对象的方法,并没有重新生成客户端的访问请求,没有生成新的ServletRequest对象,所以数据依然保持着。
在FireBug中,转发动作是不会被记录的,因为是在服务器端发生的。
HttpServletResponse对象的sendRedirect(String location)方法称为重定向。
resp.sendRedirect("");
重定向表示服务器使用HttpServletResponse的sendRedirect方法告诉客户端本次访问结束,并提供下次访问服务器的URI,重新访问服务器,生成新的ServletRequest,所以之前保存的信息会丢失掉。
在FireBug中,重定向客户端会发发送两个请求,第一个请求的状态为:302 Moved Temporarily,重定向的最后一次请求为GET url 200OK。
请求转发的整个过程处于同一个请求当中。
重定向实际上客户端会向服务器端发送两个请求。