5

希望使用带有 Serlvet 3.0 异步支持的 Struts2。

我的第一种方法是只处理写入操作中的输出流并返回 null。然而,这会返回 404“资源不可用”。我正在尝试在 struts 操作中调整 Bosh servlet,使用 ServletRequestAware、ServletResponseAware 接口注入响应。

我正在使用 struts 过滤器调度程序。不完全确定这是否可行,但如果其他人设法让异步在 struts 动作中工作,那肯定会很高兴。也许这里有一个 AsyncResult 类型或其他魔法来完成这项工作。

4

1 回答 1

4

确保 struts 过滤器允许异步。这是 web.xml 文件中的内容:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
    <async-supported>true</async-supported>
</filter>

然后从 Action 中获取HttpServletRequestandHttpServletResponseAsyncContext像在 servlet 中一样使用:

public String execute() {
  HttpServletRequest req = ServletActionContext.getRequest();
  HttpServletResponse res = ServletActionContext.getResponse();

  final AsyncContext asyncContext = req.startAsync(req, res);
  asyncContext.start(new Runnable() {
    @Override
    public void run() {
      try {
        // doing some work asynchronously ...
      }
      finally {
        asyncContext.complete();
      }
    }
  });

  return Action.SUCCESS;
}
于 2014-07-14T20:13:58.713 回答