【问题标题】:Forward request to multiple servlets in Java [duplicate]将请求转发到 Java 中的多个 servlet [重复]
【发布时间】:2018-01-03 00:04:53
【问题描述】:

我想将请求转发到 Java 中的多个 servlet。这些 servlet 中的每一个都会在收到请求后执行自己的操作。

我当前的代码是这样做的:

for(int i=0; i < numServlets; i++) {
    ServletContext servletContext = request.getServletContext();
    RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/"+ globalVars.ServletList[i]);
    requestDispatcher.forward(request, response);
}

问题是我得到 `java.lang.IllegalStateException:

Cannot forward after response has been committed 错误。

关于如何完成这项工作的任何想法?

我在网上看到,在转发请求后我应该添加return 语句以让以下代码执行,但这也不起作用。

【问题讨论】:

    标签: servlets forward requestdispatcher


    【解决方案1】:

    如果您希望一个请求由多个处理程序处理,那么您有几个选择:

    1) 大多数处理程序准备或监视数据,可以写成Filter 对象,注册到Servlet 容器中。每个请求只定义一个Servlet,负责生成响应。

    2) 编写一个Servlet,然后遍历“处理程序”并调用它们中的每一个。

    3) 编写多个Servlet 类,并将除最后一个forward() 之外的所有类都写入下一个Servlet

    我会劝阻#3。

    #1 或 #2 是否更好取决于所有“servlet”在做什么。例如。通常为以下内容编写过滤器:

    • 日志记录
    • 安全性(例如,如果未登录,则重定向到登录页面)
    • 请求修改(例如应用查询参数作为请求类型)
    • 响应处理(例如压缩)

    【讨论】:

      【解决方案2】:

      您的response 对象已损坏。你不能forward它,除非你停止写回复

      由于您在循环中转发它,因此其中一个 servlet 可能会在循环结束之前提交响应。

      servlet 可能正在写入响应或在response.sendRedirect()response.sendError() 之后以任何一种方式提交响应的原因之一。

      【讨论】:

        猜你喜欢
        • 2014-02-25
        • 2012-10-05
        • 2015-03-15
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 2017-05-14
        • 2017-02-04
        • 1970-01-01
        相关资源
        最近更新 更多