当我从单个if
语句中调用另一个servlet时,我感到震惊,即使调用了我的forward
方法,流程也没有停止,并且调用了下一个方法(我必须将它们放入进入else
语句来阻止这种情况)。
怎么样?这是否意味着forward是异步的(如果是这样,还有更多这样的“棘手”方法)?
我使用过“标准”转发:request.getRequestDispatcher(JSPFileName).forward(request, response);
答案 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
方法。