Java ServletRequest/ServletResponse操作

Java ServletRequest/ServletResponse操作,java,servlet-filters,Java,Servlet Filters,我想实现一个高级JavaServlet过滤器,用于在API服务器上处理批处理请求。类似的东西。这个想法是: 在给定url上设置servlet筛选器 覆盖doFilter(请求、响应),此处: 解析来自body的部分请求列表,对于每个: 准备部分请求 调用chain.doFilter(partialRequest,partialResponse) 记住部分反应 使用部分响应列表呈现响应 我能够为每个部分请求构造HttpServletRequestWrapper,并使用一些输出流欺骗创建Ht

我想实现一个高级JavaServlet过滤器,用于在API服务器上处理批处理请求。类似的东西。这个想法是:

  • 在给定url上设置servlet筛选器
  • 覆盖doFilter(请求、响应),此处:
  • 解析来自body的部分请求列表,对于每个:
    • 准备部分请求
    • 调用
      chain.doFilter(partialRequest,partialResponse)
    • 记住部分反应
  • 使用部分响应列表呈现响应
我能够为每个部分请求构造
HttpServletRequestWrapper
,并使用一些输出流欺骗创建
HttpServletResponseWrapper
,但这有点困难,我必须更改几乎所有部分、路径、正文、标题等


有什么好的库可以处理请求/响应,或者更好的请求/响应包装类吗?

我知道您希望将尽可能多的请求合并到一个请求中,但我不认为您会在后端对它们进行反合并

我认为您的方法使事情变得复杂,我甚至不确定是否有可能在后端生成新的HttpRequest对象


删除过滤器,坚持一个请求(在前端和后端),并为请求中的每个任务生成一个新线程。

对您感兴趣的人进行回顾性更新:

最后,我花了整整一天的时间潜入
HttpServletRequestWrapper
HttpServletResponseWrapper
黑暗森林,并完成了功能齐全的批处理过滤器,为servlet提供多个请求并聚合响应


不幸的是,此筛选器必须是servlet前面一行中的最后一个筛选器,因为后续筛选器只调用一次。

部分请求是什么意思?批处理请求正文包含多个部分请求,作为JSON对象数组,具有属性
路径
标题
body
等。过滤器应读取此对象,创建实际请求并调用链中的下一个过滤器。这意味着:一个外部请求将被处理为多个不同的部分请求,这些请求将传递给下一个筛选器。为什么要为每个任务创建单独的请求。后端的多线程不是一个选项吗?这将是可选的,仅使用标准API资源,尤其是作为客户端的移动应用程序。部分请求可以像常规请求一样并行处理,而且速度相对较快。批处理是针对移动网络中网络延迟问题的黑客攻击。我理解你的建议。在我的例子中,servlet是Jersey REST服务器。Jersey为我提供了很多有用的东西:请求解析、基于
@Path
注释选择控制器以及基于
@消耗
注释的正文反序列化。这很好,但如果我在servlet中执行流程任务(部分请求),我将无法为部分请求提供这些有用的东西。我想以请求格式批量保存任务。例如,请看类似的@mschayna,我想现在我明白了您的意图。我假设所有的部分请求都会指向同一个URL。不过,我还不知道有哪种API会产生新的请求。我唯一想到的是java.net,但这需要大量的手工劳动,而这正是您试图避免的。很抱歉