2011-10-13 7 views
13

(REQ, 고해상도) :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 (명시 적으로 비동기 (c.f. WebServlet 주석)를 가능하게했다. NetBeans와 함께 제공되는 Tomcat 7.0.11.0을 사용하고 있습니다.

req.isAsyncSupported()이 false를 반환하고 있음을 확인할 수 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 비동기 처리를 사용하려면 더 무엇을해야합니까?

편집 :

나는 다음과 같은 example을 구현하기 위해 노력하고 동일한 문제가 있어요.

+0

Tomcat 7.0.14와 함께 제공되는 NetBeans 7.0.1을 다시 설치했지만 여전히 동일한 문제가 있습니다. – JVerstry

답변

27

Tomcat의 코드를 조사해 보았을 때 asyncSupported 변수를 명시 적으로 true로 설정해야한다는 것을 알았습니다. 그것이 req.isAsyncSupported() == false이되는 이유입니다.

다음 방법 중 하나를 사용하여 HttpServletRequest 개체의 async 특성을 true로 설정할 수 있습니다.

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

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

또는

는 도움이되기를 바랍니다.

+0

오, 멋지다. 나는 이것을 시도 할 것이다. .. 많은 많은 감사! !! – JVerstry

+1

요청은 org.apache.catalina.connector.Request 유형이 아니지만 ASYNC_SUPPORTED를 true로 설정하면 작동합니다! – JVerstry

+1

좋습니다! 기꺼이 도와 줬다. – Efthymis

8

비동기를 지원하지 않는 요청 필터가 있는지 확인하십시오. 필터를 일시적으로 제거하거나 비동기를 지원하도록 표시 할 수 있습니다.

+0

예제 (web.xml에서 필터를 정의한 경우); true