RequestDispatcher.forward()树

时间:2014-02-22 03:10:32

标签: java jsp servlets redirect

假设我正在运行JSP / Servlet驱动的网站。用户将数据POST到根目录,我有一个处理路径Index.java的servlet(/)。我希望这个servlet做的是查看请求中的一些数据,并确定哪个第二级servlet应该处理它。当它决定哪个二级servlet将处理请求时,它forward()到那个二级servlet。

现在我的问题是,如果需要第三级servlet会发生什么?第二级servlet不能forward()到第三级,因为调度程序声称响应已经提交。

目视:

Index.java
 +SecondLevelA.java
 +SecondLevelB.java
 \SecondLevelC.java
   \ThirdLevelC.java

SecondLevelC.java无法转发到第三级。我也无法重定向,因为我将在重定向中丢失POST参数。 POST是必需的,因为数据对于GET查询来说太大了。

1 个答案:

答案 0 :(得分:1)

RequestDispatcher.forward()与关卡无关。它可以分层次地调用任意数量的时间。唯一的条件是在调用任何RequestDispatcher.forward()之前,不应该提交响应。第一次调用也是如此。

在您的情况下,最可能的第一个子servlet导致响应被提交。

以下是提交回复的原因:

Causes of Response getting committed.