qq_33546703 2017-04-19 07:05 采纳率: 0%
浏览 736

Servlet3.0新特性之异步处理

我想测试的是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();
            }
    }
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?