我注意到,虽然RequestDispatcher.forward(request, response)可能会抛出IllegalStateException(如果响应已提交),但RequestDispatcher.include(request, response)不会抛出IllegalStateException(即使在响应之前已提交)。
我已经在Tomcat 6.0.20上验证了这一点。
我知道include()方法没有声明可以抛出IllegalStateException,但这仍然是一个事后的想法。
你有任何关于为什么servlet-api被设计成这样的想法吗?在我看来,如果响应已经提交,就不应该允许进一步的转发/包含。
我已经在Tomcat 6.0.20上验证了这一点。
我知道include()方法没有声明可以抛出IllegalStateException,但这仍然是一个事后的想法。
你有任何关于为什么servlet-api被设计成这样的想法吗?在我看来,如果响应已经提交,就不应该允许进一步的转发/包含。
include
只是将数据添加到当前响应中。forward/redirect
需要一个空白响应。你现在明白了吗?一旦响应提交,就没有任何返回点了。字节已经发送到客户端。 - BalusC