response的sendRedirect
HttpServletResponse对象的sendRedirect(string location)方法称为重定向。如果location地址前面加上“/”,则表示相对于servlet容器的根来请求,即http://localhost:8080,如果location地址前没有加上/,则表示相对于当前请求的URI来寻找地址
RequestDispatcher的forward(request,response)方法称为请求转发,他可以通过request.getRequestDispatcher()方法获得
1、
请求转发与重定向的区别
String username = req.getParameter("username");
req.setAttribute("username", username);
// resp.sendRedirect("myResult.jsp"); //重定向,属于客户端再次发送请求,是另一次的请求
RequestDispatcher rd = req.getRequestDispatcher("myResult.jsp");
rd.forward(req, resp); //请求转发,是服务器端的行为,是同一个请求
对于重定向,是客户端的一次新的请求,上一次请求的信息全部丢失,请求转发是同一个请求,request对象是同一个,信息不丢失。
1)请求转发,整个过程在同一个请求当中
2)重定向,实际上客户端会向服务器发送两个请求:
3)RequestDispatcher是通过调用HttpServletReuuest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。
4)sendRedirect()是HttpServletResponse对象的方法,既然是响应对象的方法,既然调用了相应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。
5)重定向在FireBug中的示意图
可以看到,请求是两个,一个是GET MyForwardServlet?username=tttttt,一个是GET myResult.jsp,而地址栏这时显示的也是http://localhost:8080/webp1/myResult.jsp