tomcat - RequestDispatcher.forward() 与 RequestDispatcher.include()

标签 tomcat servlets jakarta-ee

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

我已经在 Tomcat 6.0.20 上验证过了。

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

关于为什么这样设计 servlet-api 的任何想法?恕我直言,如果已提交响应,则不应允许进一步转发/包含。

最佳答案

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

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

关于tomcat - RequestDispatcher.forward() 与 RequestDispatcher.include(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1880669/

相关文章:

eclipse - 在服务器上部署时 Maven API 不响应 (Tomcat 7)

Tomcat - 对我的 Web 服务器的奇怪请求泛滥 - 在 Apache tomcat localhost 日志上看到

javascript - 无法在jsp中使用javascript清除 session

java - 从domain.xml或persistence.xml配置Oracle获取大小

java - 何时在 Java EE 环境中打开/关闭 hibernate session

java - 使用 Spring 的模块化 Web 应用程序

java - Tomcat java.lang.ClassNotFoundException 异常

java - 如何使用JSP/Servlet将文件上传到服务器?

java - session 变量存储在 Java Web 应用程序中的位置

java - javax jws包源码