阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

请求转发和请求包含

91次阅读
没有评论

共计 1699 个字符,预计需要花费 5 分钟才能阅读完成。

一、概述

无论是请求转发还是请求包含,都表示由多个 Servlet 共同来处理一个请求。例如 Servlet1 来处理请求,然后 Servlet1 又转发给 Servlet2 来继续处理这个请求。

注意:请求转发和请求包含都是在一个 web 应用内部完成的

二、请求转发

public class AServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("AServlet"); /* 获取“调度器”,其中参数为 BServlet 绑定的 URL,即 BServlet 的 <url-pattern> 值。*/ RequestDispatcher rd = request.getRequestDispatcher("/BServlet"); // 调用“调度器”的转发方法,该方法等同与告诉服务器,去调用 BServlet 的 service() 方法一样。 rd.forward(request, response) ; } }
public class BServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("BServlet"); } }
Aservlet BServlet

三、请求包含

在 AServlet 中,把请求包含到 BServlet:

public class AServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("AServlet"); RequestDispatcher rd = request.getRequestDispatcher("/BServlet"); // 请求包含 rd.include (request, response); } }
public class BServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("BServlet"); } }

Aservlet

BServlet

四、请求转发与请求包含比较

如果在 AServlet 中请求转发到 BServlet,那么在 AServlet 中就不允许再输出响应体,即不能再使用 response.getWriter() 和 response.getOutputStream() 向客户端输出,这一工作应该由 BServlet 来完成;

如果是使用请求包含,那么没有这个限制;

请求转发虽然不能输出响应体,但还是可以设置响应头的,例如:response.setContentType(”text/html;charset=utf-8”);

请求包含大多是应用在 JSP 页面中,完成多页面的合并;

请求转发大多是应用在 Servlet 中,转发目标大多是 JSP 页面;

注意:请求转发, 留头不留体;请求包含,既可以有响应头,也可以有响应体

请求转发和请求包含

请求转发和请求包含

五、请求转发与重定向比较

请求转发是一个请求,而重定向是两个请求;

请求转发后浏览器地址栏不会有变化,而重定向会有变化,因为重定向是两个请求;

请求转发的目标只能是本应用中的资源,重定向的目标可以是其他应用;

请求转发对 AServlet 和 BServlet 的请求方法是相同的,即要么都是 GET,要么都是 POST,因为请求转发是一个请求;

重定向的第二个请求一定是 GET;

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-06-06发表,共计1699字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中