一、定义异步线程类:
package cn.edu.tju.controller;
import javax.servlet.AsyncContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class AsyncTask implements Runnable {
private HttpServletResponse response;
private AsyncContext asyncContext;
public AsyncTask(HttpServletResponse response,AsyncContext asyncContext) {
this.response = response;
this.asyncContext=asyncContext;
}
@Override
public void run() {
try {
Thread.sleep(20000);
PrintWriter out = response.getWriter();
out.write("have to...");
out.flush();
out.close();
asyncContext.complete();
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、定义异步响应的controller
package cn.edu.tju.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.AsyncContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@RestController
public class AsyncController {
@RequestMapping("/async")
public void async(String info, HttpServletRequest request, HttpServletResponse response) throws IOException {
AsyncContext asyncContext = request.startAsync();
//asyncContext.setTimeout(2000L);
//默认超时时间30秒
//System.out.println(asyncContext.getTimeout());
AsyncTask asyncTask=new AsyncTask(response,asyncContext);
new Thread(asyncTask).start();
}
}