请求转发
由下一个Servlet完成响应体,当前Servlet可以设置响应头。(留头不留体)
request.getRequestDispatcher("/MyServlet").forward(request,response);
请求包含
由两个Servlet 共同完成 响应体。(都留)
request.getRequestDispatcher("/MyServlet").include(request,response);
无论是请求转发还是请求包含,都在一个请求范围内,使用同一个request和response。
请求重定向
response.sendRedirect(String location);
重定向是服务器通知浏览器去访问另一个地址,即再发出另一个请求。
请求转发和重定向的区别
- 请求转发是 一次请求一次响应 ,而重定向是 两次请求两次响应 。
- 请求转发地址栏不变化,而重定向会显示后一个请求的地址。
- 请求转发只能转发到本项目其他Servlet,而重定向不只能重定向到本项目的其他Servlet,还能定向到其他项目。
- 请求转发是服务器端行为,只需给出转发的Servlet路径;而 重定向是客户端行为,需要给出requestURI,即包含项目名。
- 请求转发和重定向效率是转发高。因为是一个请求。
- <> 需要地址栏发生变化,那么必须使用重定向!
- <> 需要在下一个Servlet中获取request域中的数据,必须要使用转发!