2011-10-13 3 views
13

(REQ、RES):はIllegalStateException:AsyncContext.startAsyncでサポートされていません。私は、非同期リクエスト処理を探索するサーブレット3.0を作成しました

@WebServlet(name="MyTest", urlPatterns={"/MyTest"}, asyncSupported=true) 
public class MyTest extends HttpServlet { 

    @Override 
    public void doGet(HttpServletRequest req, HttpServletResponse res) 
      throws ServletException, IOException { 

     AsyncContext tmp = req.startAsync(req, res); 
     ... 

    }  

} 

は、私はIllegalStateException.startAsync(...)が呼び出されたときに取得します。私はJavadocがその例外について言及していることを知っていますが、私は明示的にasyncを有効にしました(注:WebServlet注釈)。 NetBeansに付属のTomcat 7.0.11.0を使用しています。

req.isAsyncSupported()がfalseを返すことが確認できました。私は間違って何をしていますか?非同期処理を有効にするには何をする必要がありますか?

EDIT:

私は、次のexampleを実装しようとしたと同じ問題を得ました。

+0

Tomcat 7.0.14に付属のNetBeans 7.0.1を再インストールしましたが、私はまだ同じ問題があります。 – JVerstry

答えて

27

Tomcatのコードをチェックして、asyncSupported変数を明示的にtrueに設定する必要があることがわかりました。だからあなたはreq.isAsyncSupported() == falseを得ています。

次のいずれかの方法で、HttpServletRequestオブジェクトのasync属性をtrueに設定できます。

req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true); 

または

((org.apache.catalina.connector.Request)req).setAsyncSupported(true); 

それがお役に立てば幸いです。

+0

オハイ、いいね。私はこれを試みるつもりです...多くの多くのありがとう! – JVerstry

+1

要求はorg.apache.catalina.connector.Request型ではありませんが、ASYNC_SUPPORTEDをtrueに設定すると動作します。 – JVerstry

+1

素晴らしい!喜んで助けてくれた。 – Efthymis

8

非同期をサポートできないリクエストフィルタがあるかどうかを確認してください。フィルタを(一時的に)削除するか、非同期をサポートするようにマークすることができます。

+0

例(web.xmlでフィルタを定義した場合)。 true

関連する問題