2011-10-13 13 views
13

ho creato una servlet 3.0 per esplorare l'elaborazione richiesta asincrona:IllegalStateException: Non supportato su AsyncContext.startAsync (REQ, res)

@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); 
     ... 

    }  

} 

ma ottengo un IllegalStateException quando .startAsync(...) si chiama. So che Javadoc menziona quell'eccezione, ma ho abilitato esplicitamente l'asincronizzazione (c. WebServlet annotazione). Sto usando Tomcat 7.0.11.0 fornito con NetBeans.

Posso confermare che req.isAsyncSupported() restituisce false. Che cosa sto facendo di sbagliato? Che altro devo fare per abilitare l'elaborazione asincrona?

EDIT:

ho cercato di implementare il seguente example ed ha ottenuto lo stesso problema.

+0

Ora ho reinstallato NetBeans 7.0.1, fornito con Tomcat 7.0.14, ma ho ancora lo stesso problema. – JVerstry

risposta

27

Ho controllato il codice di Tomcat e ho visto che la variabile asyncSupported deve essere impostata esplicitamente su true. Ecco perché stai ricevendo req.isAsyncSupported() == false.

Si potrebbe provare a impostare l'attributo async nell'oggetto HttpServletRequest su true in uno dei seguenti metodi.

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

o

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

Speranza che aiuta.

+0

Ohhh, bello. Ho intenzione di provare questo ... Molte molte grazie !!! – JVerstry

+1

La richiesta non è di tipo org.apache.catalina.connector.Request, ma l'impostazione di ASYNC_SUPPORTED su true works !!! – JVerstry

+1

Ottimo! Felice di aver aiutato. – Efthymis

8

Controllare se si dispone di un filtro di richiesta che non è abilitato per supportare asincrona. O è possibile rimuovere il filtro (temporaneamente) o contrassegnarlo per supportare asincrono.

+0

Esempio (se si definisce il filtro in web.xml); true

Problemi correlati