/**
* Copyright (c) 2005-2012 https://github.com/zhangkaitao
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.sishuok.chapter3.web.servlet.listener;
import javax.servlet.AsyncContext;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* <p>User: Zhang Kaitao
* <p>Date: 13-7-18 上午7:19
* <p>Version: 1.0
*/
@WebServlet(name = "listenerServlet2", urlPatterns = "/listener2", asyncSupported = true)
public class ListenerServlet2 extends HttpServlet {
@Override
protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
final AsyncContext asyncContext = req.startAsync();
asyncContext.setTimeout(10 * 1000);
asyncContext.addListener(new AsyncListener() {
@Override
public void onComplete(final AsyncEvent event) throws IOException {
System.out.println("=====async complete");
}
@Override
public void onTimeout(final AsyncEvent event) throws IOException {
System.out.println("=====async timeout");
asyncContext.complete(); //需要调用下complete 否则按超时时间(比如当前设置的是10秒)重新调度一次当前方法
}
@Override
public void onError(final AsyncEvent event) throws IOException {
System.out.println("=====async error");
}
@Override
public void onStartAsync(final AsyncEvent event) throws IOException {
System.out.println("=====start new async");
}
});
asyncContext.dispatch("/error"); //分派到一个不存在的地址 会报404,但是最终服务器会调用onComplete来完成异步
}
}