首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RequestDispatcher.forward()与RequestDispatcher.include()

RequestDispatcher.forward()与RequestDispatcher.include()
EN

Stack Overflow用户
提问于 2009-12-10 20:28:19
回答 2查看 4.4K关注 0票数 4

我观察到,虽然RequestDispatcher.forward(request,response)可以抛出IllegalStateException (如果响应已提交),但RequestDispatcher.include(request,response)不会抛出IllegalStateException(即使之前已经提交了响应)。

我已经在Tomcat 6.0.20上验证了这一点。

我知道include()方法并没有声明可以抛出一个IllegalStateException,但它仍然是一个事后的想法。

关于为什么servlet-api是这样设计的,你有什么想法吗?IMHO,如果响应已提交,则不应允许进一步转发/包含。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-11 10:34:24

如果Include抛出像Forward一样的IllegalStateException,那么Include将是无用的。常见的用例是在servlet中编写页面的一部分,然后包含来自另一个资源的其他部分。因此,响应很可能已经启动或提交。

如果您查看实现,Include并不关心原始响应的状态,因为它使用了全新的包装响应。从包含的资源返回后,包装响应中的正文被附加到原始响应中。而转发则使用相同的响应,因此它必须保持不变。

票数 4
EN

Stack Overflow用户

发布于 2009-12-11 00:00:33

include只是将更多信息添加到响应中。它是否已经提交并不重要。转发(和重定向)只需要一个空白和干净的响应,因为它将由目标独占使用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1880669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档