假设我正在运行一个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.