要求servlet3.0以上环境。Tomcat8.0。依赖于servlet-api(Tomcat的包)
1.顺序出错
import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(value = "/asyn", asyncSupported = true)
public class ServletAsync extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
AsyncContext startAsync = req.startAsync();
startAsync.start(new Runnable() {
@Override
public void run() {
try {
sayHello();
startAsync.complete(); // 此处说明异步的结束。但是不知道为啥不能在这里用
AsyncContext aContext = req.getAsyncContext();
ServletResponse response = aContext.getResponse();
response.getWriter().write("Hello Async...");
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
protected void sayHello() throws Exception {
Thread.sleep(3000);
System.out.println("异步处理中...\nHello~");
}
}
2.解决问题
import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//支持异步
@WebServlet(value = "/asyn", asyncSupported = true)
public class ServletAsync extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
AsyncContext startAsync = req.startAsync();
startAsync.start(new Runnable() {
@Override
public void run() {
try {
sayHello();
AsyncContext aContext = req.getAsyncContext(); // 这里可能需要在complete()前使用。
ServletResponse response = aContext.getResponse();
response.getWriter().write("Hello Async...");
startAsync.complete(); // 此处说明异步的结束。
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
protected void sayHello() throws Exception {
Thread.sleep(3000);
System.out.println("异步处理中...\nHello~");
}
}
庄周晓梦迷蝴蝶,望帝春心托杜鹃。——李商隐