如何克隆Servlet容器提供的分离的HttpServletRequest和HttpServletResponse?

L.J*_*J.W 8 java servlets

我想实现以下逻辑:当我在主servlet的doService方法(在主Web容器线程中)中收到HttpServletRequeset和HttpServletResponse时,我启动A,B,C三个线程(由我自己的程序管理的线程)来处理其他servlet并行模式,然后在主线程中加入来自这些servlet的每个响应,如果我自己的一个线程(假设一个线程)工作缓慢,主线程将完成,所以主响应将返回给user.A 线程必须继续如果工作正常,我稍后会在浏览器端使用AJAX请求A线程的响应.

因此,我想克隆Servlet容器提供的HttpServlettRequest和HttpServletResponse,并且必须分离克隆的请求和响应(当容器的HttpServletTrequest和HttpServletResponse完成时,克隆的请求和响应仍然可以正常工作).

克隆的请求和响应的行为必须与我的代码视图中的Container相同.它可以被跟踪和包含.

任何的想法?

非常感谢!

所需产物

小智 7

可以通过HttpServletResponseWrapper类http://docs.oracle.com/javaee/1.3/api/javax/servlet/http/HttpServletResponseWrapper.html克隆HTTP请求和响应.您可以在Sun文档https://web.archive.org/web/20120626033905/http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets8.html上找到使用示例.

请注意,这是Sun(当时)解决此问题的一种解决方法,因为从未计划过您可以在提交之前修改请求和响应信息.

您可以使用包装器制作Http信息的副本,并将其传递给其他线程.


Dav*_*veH 4

听起来您需要创建类来充当 HttpRequest 和 HttpResponse 对象的委托,然后将引用传递给 Runnable 对象进行处理。

有些操作只能对 HttpRequest 对象执行一次(从输入流中读取),委托类必须满足这一点。

但不确定如果 A、B 和 C 线程对 HttpResponse 对象进行冲突的更改,您将要做什么。

我想我不想将 HttpResponse 对象传递给处理线程,而将填充响应的逻辑留在控制 servlet 类中