先写个Servlet
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 开启异步。本方法所有代码均立即执行,但就是不立即返回,
* 除非context.complete()或context.dispatch() 或 Timeout;
*/
AsyncContext context = request.startAsync();
/**
* 设置超时时间,如果超出本时间,将返回500返回码服务器错误。
*/
context.setTimeout(150000);
/**
* 启动一个新的线程。处理它。在这个里面根据条件去context.complete();
*/
context.start(new Chuli(context));
}
写一个处理类
package com.alisita;
import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.ServletResponse;
public class Chuli implements Runnable{
private AsyncContext context;
public Chuli(AsyncContext context) {
super();
this.context = context;
}
@Override
public void run() {
/**
* 睡个8秒模拟一下。
*/
try {
Thread.currentThread().sleep(8000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 设置返回结果
*/
ServletResponse response = context.getResponse();
response.setContentType("text/html;charset=UTF8");
try {
response.getWriter().write("ok");
} catch (IOException e) {
e.printStackTrace();
}
/**
* 结束异步,立即响应。
*/
context.complete();
}
}