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