Servlet请求转发为什么不会输出源Servlet的写入数据

发布于 2022-09-11 14:48:42 字数 1420 浏览 19 评论 0

孙卫琴《Tomcat与Java Web开发技术详解》(第2版)P149请求转发一节有一个问题不大懂:

下面是相关代码,实现了CheckServlet将请求转发给OutputServlet。疑惑的地方在,请求转发前后CheckServlet写入的数据都没有发给客户端,这是为什么呢?

(1)源Servlet:

public class CheckServlet extends GenericServlet {

  public void service(ServletRequest request,ServletResponse response)
    throws ServletException, IOException {

    //省略部分代码
    
    request.setAttribute("msg", message);
 
    ServletContext context = getServletContext();
    RequestDispatcher dispatcher =context.getRequestDispatcher("/output");  
 
    PrintWriter out=response.getWriter();

    // 转发前源Servlet的output
    out.println("Output from CheckServlet before forwarding request."); 
    System.out.println("Output from CheckServlet before forwarding request.");
    
    dispatcher.forward(request, response);

    // 转发后源Servlet的output
    out.println("Output from CheckServlet after forwarding request."); 
    System.out.println("Output from CheckServlet after forwarding request.");
  }
}

(2)目标Servlet

public class OutputServlet extends GenericServlet {

  public void service(ServletRequest request,ServletResponse response)
    throws ServletException, IOException {

    String message = (String)request.getAttribute("msg");
    PrintWriter out=response.getWriter();

    out.println(message); 
    out.close();
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

燃情 2022-09-18 14:48:42

嗯,请求转发前后CheckServlet写入的数据应该是发送给客户端了,只不过由于请求被转发了,客户端的所有显示都是由转发后的servlet生成的,转发前的servlet产生的客户端输出也会被转发后的servlet的客户端输出覆盖,表面上看起来转发前的servlet没有输出。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文