Servlets 在java中将请求转发到多个servlet

Servlets 在java中将请求转发到多个servlet,servlets,forward,requestdispatcher,Servlets,Forward,Requestdispatcher,我想将请求转发到java中的多个servlet。每个servlet在收到请求后都将执行自己的操作。我当前的代码是这样做的: for(int i=0; i < numServlets; i++) { ServletContext servletContext = request.getServletContext(); RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/"+

我想将请求转发到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);
}
for(int i=0;i
问题是我得到
java.lang.IllegalStateException:提交响应后无法转发
错误。你有什么想法可以让它工作吗


我在网上读到,在对请求进行预处理后,我应该添加return语句以让以下代码执行,但这也不起作用。

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

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

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

3) 编写多个
Servlet
类,并将最后一个
forward()
转发到下一个
Servlet

我会劝阻的

1还是2更好取决于所有“servlet”都在做什么。例如,通常为以下各项编写过滤器:

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

您的
响应
对象已损坏。除非停止对响应的写入,否则无法
转发它

因为您在循环中转发它,所以其中一个servlet可能会在循环结束之前提交响应

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