Servlet请求转发为什么不会输出源Servlet的写入数据
孙卫琴《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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
嗯,请求转发前后CheckServlet写入的数据应该是发送给客户端了,只不过由于请求被转发了,客户端的所有显示都是由转发后的servlet生成的,转发前的servlet产生的客户端输出也会被转发后的servlet的客户端输出覆盖,表面上看起来转发前的servlet没有输出。