Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Servlets request.getRequestDispatcher.forward()是否异步?_Servlets - Fatal编程技术网

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
方法。

相关: