在java中向多个servlet转发请求[复制]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

我想在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
2个回答
0
投票

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

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

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

3)写下多个Servlet类,除了最后一个forward()以外的所有Servlet

我会劝阻#3。

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

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

0
投票

您的response物体已损坏。你不能forward它,除非你停止写回应。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.