希望将Struts2与Serlvet 3.0异步支持一起使用。
我的第一种方法是处理在动作中写入输出流并返回null。然而,这返回404“资源不可用”。我试图在struts动作中调整一个Bosh servlet,使用ServletRequestAware,ServletResponseAware接口来注入响应。
我正在使用struts过滤器调度程序。不完全确定这是否可行,但如果其他人设法在struts动作中设法异步工作,那么肯定会很高兴。也许这里有一个AsyncResult类型或其他一些神奇的工具。
答案 0 :(得分: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中获取HttpServletRequest
和HttpServletResponse
,并像在servlet中一样使用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;
}