我想测试的是setTimeout后,当异步线程超时会有什么结果,第一次打开算正常但刷新之后就变成这样子。困扰了好久,求大神解答一下
代码如下:
package test11;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns="/test1", asyncSupported=true)
public class test1 extends HttpServlet {
private static final long serialVersionUID = 1L;
public test1() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
//开始时间
out.println(new Date() + "<br/>");
AsyncContext asyncContext = request.startAsync();
//设置超时时间0.5秒
asyncContext.setTimeout(500);
//开始异步处理
asyncContext.start(new Run(asyncContext));
//结束时间
out.println(new Date()+ "<br/>");
out.flush();
}
}
class Run implements Runnable
{
private AsyncContext asyncContext;
public Run(AsyncContext asyncContext)
{
this.asyncContext = asyncContext;
}
@Override
public void run()
{
PrintWriter out = null;
HttpServletRequest httpServletRequest = null;
try {
httpServletRequest = (HttpServletRequest) asyncContext.getRequest();
HttpServletResponse httpServletResponse = (HttpServletResponse) asyncContext.getResponse();
out = httpServletResponse.getWriter();
//打印异步开始标志in
out.println("in"+ "<br/>");
//睡眠1秒,代表耗时的业务方法
Thread.sleep(1000);
//业务方法完成,打印完成标记out
out.println("out"+ "<br/>");
//输出完成时间
out.println(new Date()+ "<br/>");
asyncContext.dispatch("/index.jsp");
} catch (Exception e) {
e.printStackTrace();
}
}
}