【问题标题】:Is possible to exchange the http requests and responses on a Java Servlet environment?是否可以在 Java Servlet 环境中交换 http 请求和响应?
【发布时间】:2014-11-18 20:50:41
【问题描述】:

我正在开发一个服务器控件,以避免在 Java 服务器端重复处理相同的请求类型。 主要目标是避免用户通过重复单击硬处理请求来淹没我的服务器处理器。 我正在开发一个 Servlet 过滤器来控制请求流,但如果有一个仍在处理的先前请求,我可以通过返回 HTTP 204 状态来“中止”第二个请求。 从服务器的角度来看,是可以的。但是网络浏览器只会处理那个“中止”的请求,而不是第一个。

Browser sends request "A"
Server starts to process the request "A"
Browser sends request "B"
Server aborts request "B" (HTTP 204)
Browser receives response "B" (Aborted)
Server finishes the request "A"
Browser does not displays / receives the request "A"

所以,最后是问题。 是否可以更改请求的响应? 这样就可以避免服务器端的重复处理,浏览器可以显示请求的内容。

您能否提出另一种解决该问题的方法?

Browser sends request "A"
Server start processing request "A"
Browser sends request "B"
Server "holds" request "B"
Server finishes the request "A"
Server forwards the request "B" to the the response "A"
Server aborts the request "A" (http 204)
Browser displays / receives the request "B" with the response "A" content / headers

提前致谢。

【问题讨论】:

  • 我会使用大气或其他一些 websocket 框架。
  • 你好@eduyayo,我同意你的观点,但我正在寻找一种不意味着对现有代码进行大规模重新设计的方法。
  • mh... 然后你必须在会话中保持“活动”一个工作线程并继续输入它。在 struts2 struts.apache.org/release/2.0.x/struts2-core/apidocs/org/apache/… 中做了类似的事情,但你必须将逻辑扩展到当cient再次打电话检查是否完成时继续喂食
  • 你好@eduyayo。这很有趣。我正在考虑一个临时上下文来存储第一个响应,然后第二个请求可以直接从这个临时上下文中获取内容。
  • 请注意,您可能会在会话中用东西阻塞服务器......必须仔细计划一下

标签: java http servlets request response


【解决方案1】:

您可以使用micro-caching,而不是使用这种方法,即只缓存较短的内容,例如 1s、10s。这种方式不是 http204,而是返回缓存的内容。您的用户会对这种方法更满意。您可以synchronize您的 servlet 代码,以便在您的 servlet 中只处理一个请求。但请注意synchronized servlet is not a good design

【讨论】:

  • 你好@Atilla。您认为我可以在 http 会话范围内缓存响应内容吗?我不希望用户看到其他用户缓存的内容。
【解决方案2】:

我将根据@BalusC 的 Stack Overflow 答案进行缓存。 How to read and copy the HTTP servlet response output stream content for logging。 我无法交换其他请求的响应,但我可以在短时间内缓存之前的响应。后续请求可以收到缓存的响应,从而避免处理器泛滥。 感谢@eduyayo 的建议。

【讨论】:

  • 顺便提一下,这种方法是不正确的。当我双击请求链接时,浏览器取消第一个请求的传输,因此我的缓存未完成以服务第二个请求:/
猜你喜欢
  • 2015-02-08
  • 2019-02-05
  • 2019-03-10
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2013-03-10
相关资源
最近更新 更多