5

Serlvet3.0AsyncをサポートするStruts2の使用を検討しています。

私の最初のアプローチは、アクションで出力ストリームに書き込み、nullを返すことだけを処理することでした。ただし、これは404「リソースが利用できません」で返されます。ServletRequestAware、ServletResponseAwareインターフェースを使用して応答を挿入し、Strutsアクション内でBoshサーブレットを適応させようとしています。

ストラットフィルターディスパッチャーを使用しています。これが実行可能かどうかは完全にはわかりませんが、他の誰かが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>

HttpServletRequest次に、Action 内からandを取得し、サーブレット内で行うよう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;
}
于 2014-07-14T20:13:58.713 に答える