Servlets request.getRequestDispatcher.forward()是否异步?
当我在单个Servlets request.getRequestDispatcher.forward()是否异步?,servlets,Servlets,当我在单个if语句中从另一个servlet调用一个servlet时,我感到震惊,即使调用了我的forwarding方法,流也没有停止,下一个方法也被调用(我必须将它们放入else语句中才能停止)
if
语句中从另一个servlet调用一个servlet时,我感到震惊,即使调用了我的forward
ing方法,流也没有停止,下一个方法也被调用(我必须将它们放入else
语句中才能停止)<为什么?这是否意味着转发是异步的(如果是的话,是否还有其他类似的“棘手”方法)
我使用了“标准”转发:
request.getRequestDispatcher(JSPFileName).forward(请求,响应)代码>不,这并不意味着它是异步的。这只是意味着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");
不,它不是异步的,但是如果在服务
方法中调用forward
方法并且不返回,则可以执行其他操作(这是同一线程),但是请记住,forward删除在调用之前添加的响应中的所有未提交的输出。
如果要在响应中包含servlet的输出,请使用include
方法。相关: