这个问题在这里已有答案:
我想在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语句让以下代码执行,但这也不起作用。
如果您希望多个处理程序处理请求,那么您有几个选择:
1)大多数处理程序准备或监视数据,并且可以编写为在Servlet容器中注册的Filter
对象。每个请求只定义一个Servlet
,负责生成响应。
2)写一个Servlet
然后遍历“处理程序”并调用它们中的每一个。
3)写下多个Servlet
类,除了最后一个forward()
以外的所有Servlet
。
我会劝阻#3。
#1或#2是否更好取决于所有“servlet”正在做什么。例如。为以下内容编写过滤器是很常见的:
您的response
物体已损坏。你不能forward
它,除非你停止写回应。
由于您在循环中转发它,因此其中一个servlet可能会在循环结束之前提交响应。
servlet可能在response.sendRedirect()
或response.sendError()
之后写入响应或以任一方式提交它的原因之一。