servlet3.0异步实现

package com.xindun.server.servlet;

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;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

@WebServlet(urlPatterns = "/demo", asyncSupported = true)
public class AsyncDemoServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException, ServletException {
        resp.setContentType("text/html;charset=UTF-8");


        PrintWriter out = resp.getWriter();


        out.println("进入Servlet的时间:" + new Date() + ".");


        out.flush();


        //在子线程中执行业务调用,并由其负责输出响应,主线程退出


        AsyncContext ctx = req.startAsync();


        new Thread(new Executor(ctx)).start();


        out.println("结束Servlet的时间:" + new Date() + ".");


        out.flush();


    }


}


class Executor implements Runnable {


    private AsyncContext ctx = null;


    public Executor(AsyncContext ctx) {


        this.ctx = ctx;


    }


    public void run() {


        try {


            //等待十秒钟,以模拟业务方法的执行


            Thread.sleep(10000);


            PrintWriter out = ctx.getResponse().getWriter();


            out.println("业务处理完毕的时间:" + new Date() + ".");


            out.flush();


            ctx.complete();


        } catch (Exception e) {


            e.printStackTrace();


        }
    }
}


-END-

如果你喜欢我的分享,欢迎关注微信公众号 java学长分享技术干货!

悄悄告诉你免费赠送重磅互联网架构师教程,提升职场技术水平!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT悍将阿瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值