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

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

视觉上:

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


SecondLevelC.java无法转发到第三级。我也无法重定向,因为我将在重定向中丢失POST参数。由于数据对于GET查询而言太大,因此需要POST。

最佳答案

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

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

做出响应的原因如下:

Causes of Response getting committed.

07-24 09:45
查看更多