struts2异步操作

spe*_*jus 5 struts2 servlet-3.0

希望使用Struts2和Serlvet 3.0异步支持.

我的第一种方法是只处理在动作中写入输出流并返回null.然而,这返回404"资源不可用".我试图在struts动作中调整一个Bosh servlet,使用ServletRequestAware,ServletResponseAware接口来注入响应.

我正在使用struts过滤器调度程序.不完全确定这是否可行,但如果其他人设法在struts动作中设法异步工作,那么肯定会很高兴.也许这里是一个AsyncResult类型或其他一些神奇的工具.

Bri*_*ace 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>
Run Code Online (Sandbox Code Playgroud)

然后从 Action 中获取HttpServletRequest和并像在 servlet 中一样HttpServletResponse使用:AsyncContext

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;
}
Run Code Online (Sandbox Code Playgroud)