如何集成AJAX和Java EE servlet 3异步响应

时间:2013-04-01 15:17:25

标签: java ajax servlet-3.0

我在考虑如何让AJAX使用servlet 3异步响应。在请求 - 响应同步处理模型中,当响应返回时,XmlHttpRequest的回调可以获得响应文本;但是如何在另一个线程中处理响应,并返回一些消息,XHR在请求结束时会得到什么?还能得到反应机构吗?我尝试了一个简单的代码来测试它,似乎没有得到响应;

我可以理解这一点,当AJAX请求返回时,响应中没有任何内容,它将在另一个服务器线程中被延迟,因此回调什么也得不到。

但我想知道有没有办法让AJAX得到正确的答案?

1 个答案:

答案 0 :(得分:0)

我恐怕之前犯了一个错误,我忘了在异步处理完成后调用asycContext.complete()。在调用complete()之后,ajax得到响应。但是,如果处理持续时间超过超时设置,就像下面一样,会出现一个异常,说明asynccontext的非法状态,并且客户端什么也得不到:

    final AsyncContext ac = request.startAsync();


   ac.setTimeout(1000);


    Executors.newSingleThreadExecutor().execute(new Runnable(){

        @Override
        public void run() {
            PrintWriter pw;
            try {
                Thread.sleep(2000);
                pw = ac.getResponse().getWriter();
                pw.write("Hello, World!");
                ac.complete();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    });

所以我猜这里的关键是:1。处理完成后调用完成; 2.设置适当的超时;