示例#1
1
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    resp.getWriter().write(super.getServletName());

    AsyncContext asyncContext = req.startAsync();
    asyncContext.setTimeout(0);

    /*
     * O metodo createListener() cria um listener da classe informada que
     * deve extender AsyncListener. Este metodo adiciona suporte para a
     * notacoes e injecao de dependencias dentro do listener criado, deste
     * modo, objetos sao injetados dentro desse listener depois que ele é
     * criado.
     */
    MyAsyncListener myAsyncListener = asyncContext.createListener(MyAsyncListener.class);

    /*
     * O metodo addListener(AsyncListener) registra o listener informado ao
     * AsyncContext em questao.
     */
    asyncContext.addListener(myAsyncListener);

    /*
     * O metodo addListener() é sobrecarregado para receber um
     * ServletRequest e um ServletResponse, que podem ser recuperados mais
     * tarde dentro do listener atraves dos metodos getSuppliedRequest() e
     * getSuppliedResponse() de AsyncEvent.
     */
    // asyncContext.addListener(myAsyncListener, null, null);

    AsyncTask task = new AsyncTask(asyncContext);
    asyncContext.start(task);
  }
示例#2
0
  /**
   * Caso o response ja esteja fechado ou o metodo startAsync() ja tenha sido chamado, uma nova
   * invocacao resultara em uma IllegalStateException.
   */
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    PrintWriter writer = resp.getWriter();

    writer.println("Antes de iniciar a tarefa assincrona");

    /*
     * Para iniciar uma requisicao assincrona, basta chamar o metodo
     * startAsync de ServletRequest. O metodo startAsync é sobrecarregado
     * para receber um ServletRequest e um ServletResponse, desta forma é
     * possivel passar wrappers para ele. Caso o metodo startAsync seja
     * chamado, os objetos ServletRequest e Response originais serao
     * utilizados.
     */
    AsyncContext asyncContext = req.startAsync();

    MyAsyncTask asyncTask = new MyAsyncTask(asyncContext, writer);

    /*
     * O tempo padrao de time out depende do container, geralmente está
     * entre 5 e 10 segundos. Para desabilitar o time out basta informar um
     * valor negativo ou 0. Esse metodo pode ser chamado antes ou depois do
     * metodo start().
     */
    asyncContext.setTimeout(-1);

    /*
     * A Interface AsyncContext possui metodos para configurar a tarefa
     * assincrona e inicializar a mesma. O metodo estart recebe um runnable
     * que sera responsavel por realizar o processamento da tarefa
     * assincrona. Quando esse metodo é chamado, o processamento é realizado
     * por outra Thread do pool de Threads do servidor.
     */
    asyncContext.start(asyncTask);

    /*
     * Depois do start() da tarefa assincrona, o fluxo continua normalmente,
     * e quando o metodo service() é encerrado, a resposta nao é commitada
     * enquanto o metodo complete() de AsyncContext não for chamado. Desta
     * forma, o container processa a tarefa assincrona um background em
     * outra Thread.
     */
    writer.println("Depois de iniciar a tarefa assincrona");

    /*
     * Retorna o AsyncContext inicializado para esse request. Caso o metodo
     * startAsync() ainda nao tenha sido chamado, uma IllegalStateException
     * ocorrera.
     */
    req.getAsyncContext();
  }
示例#3
0
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {
   PrintWriter out = resp.getWriter();
   logger.info(req.getDispatcherType());
   out.println("success async2");
   // 非法调用,此时Async的状态是DISPATCHED,complete在startAsync调用之后,dispatch之前进行调用是合法的;否则抛出IllegalState
   // 此时分派尚未返回到容器,在service返回后,容器将执行complete
   //        asyncContext.complete();
   AsyncContext asyncContext = req.startAsync();
   asyncContext.start(
       () -> {
         System.out.println("Start!");
         asyncContext.complete(); // 完成,进行响应
       });
 }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

      final AsyncContext asyncContext = request.startAsync(request, response);

      asyncContext.addListener(new TrackingListener(false, false, null));

      asyncContext.start(
          new Runnable() {

            @Override
            public void run() {
              try {
                Thread.sleep(3 * 1000);
                asyncContext.getResponse().getWriter().write("Runnable-");
                asyncContext.complete();
              } catch (Exception e) {
                e.printStackTrace();
              }
            }
          });
    }
 public void doGet(HttpServletRequest req, HttpServletResponse res)
     throws ServletException, IOException {
   final AsyncContext asyncCtx = req.startAsync(req, res);
   AsyncAction asyncAction = new AsyncAction();
   asyncCtx.addListener(new MyAsyncListener());
   asyncCtx.start(asyncAction.f.service(asyncCtx));
 }