2011-10-13 26 views
13

tôi đã tạo ra một servlet 3.0 để khám phá xử lý yêu cầu không đồng bộ:IllegalStateException: Không hỗ trợ trên 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); 
     ... 

    }  

} 

nhưng tôi nhận được một IllegalStateException khi .startAsync(...) được gọi. Tôi biết Javadoc đề cập đến ngoại lệ đó, nhưng tôi đã bật một cách rõ ràng các chú thích không đồng bộ (c.f. WebServlet). Tôi đang sử dụng Tomcat 7.0.11.0 được phân phối với NetBeans.

Tôi có thể xác nhận rằng req.isAsyncSupported() đang trả về false. Tôi đang làm gì sai? Tôi cần phải làm gì để kích hoạt xử lý không đồng bộ?

EDIT:

tôi đã cố gắng để thực hiện các example sau và có cùng một vấn đề.

+0

Tôi hiện đã cài đặt lại NetBeans 7.0.1, đi kèm với Tomcat 7.0.14, nhưng tôi vẫn gặp sự cố tương tự. – JVerstry

Trả lời

27

Tôi đã kiểm tra mã của Tomcat và thấy rằng biến asyncSupported phải được đặt rõ ràng là true. Đó là lý do tại sao bạn đang nhận được req.isAsyncSupported() == false.

Bạn có thể thử đặt thuộc tính async trong đối tượng HttpServletRequest thành đúng theo một trong các phương pháp sau.

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

hoặc

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

Hy vọng nó giúp.

+0

Ồ, thật tuyệt. Tôi sẽ thử điều này ... Rất nhiều người cảm ơn !!! – JVerstry

+1

Yêu cầu không thuộc loại org.apache.catalina.connector.Request, nhưng thiết lập ASYNC_SUPPORTED thành công trình thực sự !!! – JVerstry

+1

Tuyệt vời! Rất vui được giúp đỡ. – Efthymis

8

Vui lòng kiểm tra xem bạn có bất kỳ bộ lọc yêu cầu nào không được bật để hỗ trợ async không. Bạn có thể xóa bộ lọc (tạm thời) hoặc đánh dấu bộ lọc để hỗ trợ async.

+0

Ví dụ (nếu bạn xác định bộ lọc của mình trong web.xml); true

Các vấn đề liên quan