request.getRequestDispatcher.forward()是异步的吗?

时间:2011-09-26 07:58:47

标签: servlets

当我从单个if语句中调用另一个servlet时,我感到震惊,即使调用了我的forward方法,流程也没有停止,并且调用了下一个方法(我必须将它们放入进入else语句来阻止这种情况)。
怎么样?这是否意味着forward是异步的(如果是这样,还有更多这样的“棘手”方法)?

我使用过“标准”转发:request.getRequestDispatcher(JSPFileName).forward(request, response);

2 个答案:

答案 0 :(得分:1)

不,这并不意味着它是异步的。它只是意味着forward是一个常规的Java方法,并且没有理由不执行其余的代码。在转发请求后,您有责任避免修改响应。但是为什么以下代码不能将所有内容记录到标准输出中?

System.out.println("About to forward the request to " + jspFileName + "...");
long t0 = System.currentTimeMillis();
request.getRequestDispatcher(jspFileName).forward(request, response);
long t1 = System.currentTimeMillis();
System.out.println("The forward took " + (t1 - t0) + " to complete");

答案 1 :(得分:1)

不,它不是异步的,但是如果你在forward方法中调用service方法并且不返回,则可以执行其他操作(它是相同的线程),但请记住向前删除所有在调用之前添加的响应中的未提交输出。 如果要在响应中包含servlet的输出,请使用include方法。

相关问题