async-supported是servlet 3.0后推出的新特性:

作用是支持异步处理。

如果你的web.xml是2.5,会报错。

接下来,看一下异步处理的相关:

参考文档:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html

Servlet 3.0 之前,一个普通 Servlet 的主要工作流程大致如下:首先,Servlet 接收到请求之后,可能需要对请求携带的数据进行一些预处理;接着,调用业务接口的某些方法,以完成业务处理;最后,根据处理的结果提交响应,Servlet 线程结束。其中第二步的业务处理通常是最耗时的,这主要体现在数据库操作,以及其它的跨网络调用等,在此过程中,Servlet 线程一直处于阻塞状态,直到业务方法执行完毕。

Servlet 3.0 针对这个问题做了开创性的工作,现在通过使用 Servlet 3.0 的异步处理支持,之前的 Servlet 处理流程可以调整为如下的过程:首先,Servlet 接收到请求之后,可能首先需要对请求携带的数据进行一些预处理;接着,Servlet 线程将请求转交给一个异步线程来执行业务处理,线程本身返回至容器,此时 Servlet 还没有生成响应数据,异步线程处理完业务以后,可以直接生成响应数据(异步线程拥有 ServletRequest 和 ServletResponse 对象的引用),或者将请求继续转发给其它 Servlet。如此一来, Servlet 线程不再是一直处于阻塞状态以等待业务逻辑的处理,而是启动异步线程之后可以立即返回。

一个简单的模拟异步处理的 Servlet 示例如下:

@WebServlet(urlPatterns = "/demo", asyncSupported = true)

public class AsyncDemoServlet extends HttpServlet {

    @Override

    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();

    }

}

public 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();

        }

    }

}

async-supported的作用相关推荐

  1. php中jquery ajax请求参数,浅谈Jquery中Ajax异步请求中的async参数的作用

    之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html asy.js function testAsync{ var temp; $.ajax( ...

  2. JS中关于async和defer作用与区别

    <script src="script.js"></script> 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,"立即&q ...

  3. SpringBoot异步任务, 以及带返回值的异步任务(@Async 不起作用的原因)

    第一部分: 无返回值异步任务 当没有加入异步任务的时候,我们创建一个service ,里面的方法需要等待3秒才能完成, controller层写一个测试方法调用时间返回的接口, 直接调用, 下面是se ...

  4. ajax on ture,Ajax请求中的async:false/true(同步/异步)的作用

    async. 默认是true,即为异步方式,$.Ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.Ajax里的success方法,这时候执行的是两个线程.若要将其设置为fa ...

  5. 用 async/await 来处理异步

    引用出处:https://www.cnblogs.com/SamWeb/p/8417940.html 昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简 ...

  6. python await原理_JavaScript async/await原理及实例解析

    随着Node 7的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await. 异步编程的最高境界,就是根本不用关心它是不是异步. async 函数就是隧道尽头的亮光,很多人认为它 ...

  7. spring async 默认线程池_springboot:异步调用@Async

    在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是顺序执行(不考虑多线程并发的情况),但是顺序执行的效率肯定是无法达到我们的预期的,这时就期望可以并行执行,常规 ...

  8. 为什么我们要使用Async、Await关键字

    前不久,在工作中由于默认(xihuan)使用Async.Await关键字受到了很多质问,所以由此引发这篇博文"为什么我们要用Async/Await关键字",请听下面分解: Asyn ...

  9. 理解 JavaScript 的 async/await

    随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.我第一次看到这组关键字并不是在 JavaScript 语言里,而是在 c# 5.0 的语法中.C# ...

  10. 在controller类的每个方法执行前调用某个方法_springboot:异步调用@Async

    作者 |  迷茫中守候 来源 |  urlify.cn/MbMN32 66套java从入门到精通实战课程分享 在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是 ...

最新文章

  1. 电脑键盘数字键失灵_C4D/3dmax/MaYa三维设计——高档机械键盘推荐·红轴(200元左右预算)...
  2. 数据结构—什么叫满K叉树?
  3. shell脚本接收输入
  4. 【LeetCode笔记】543. 二叉树的直径(Java、dfs、二叉树)
  5. 20180917 - 机器学习与线性回归
  6. 荣耀Magic V真机首曝:2022折叠机的引领之作
  7. 关于phpexcel读取时间字段的格式不正确
  8. 《你不知道的JavaScript》整理(二)——this
  9. 性能测试:竞品APP性能对比测试
  10. MATLAB 2018
  11. Oracle 10g 数据库服务器的安装
  12. android融云客服功能,客服开发指南 - 融云 RongCloud
  13. Android Camera2 教程 · 第三章 · 预览
  14. Web前端之仿携程首页布局
  15. 微信小程序封装分享与分销功能
  16. 20200724-Java-抽象类、接口
  17. OpenCV 学习笔记-day13 像素值统计 统计计算最大最小值,平均值和标准差 (minMaxLoc()和meanStdDev()函数的使用)
  18. MongoDB之增删改查全套语法锦囊⭐️【初学者福利】
  19. StarGAN-VC语音音色转换
  20. [EDI案例] 法雷奥/Valeo EDI解决方案

热门文章

  1. python操作符是什么意思_如何使用python操作符**与*?有什么区别?
  2. WEB 视频开发-视频播放器
  3. 嵌入式实践教程--Android HAL自定义HAL代码教程
  4. 计算机二级word海报体,2016年计算机二级《MSOffice》全真模拟试题
  5. cad编辑节点快捷键是什么_cad进入块编辑快捷键是什么,Auto CAD进入块编辑快捷键是什么?...
  6. 闭关之 Vulkan 应用开发指南笔记(二):队列、命令、移动数据和展示
  7. 用java实现猜数字游戏程序:基础、偏移、三次机会、是否继续玩
  8. 【论文阅读】Advances and challenges in conversational recommender systems: A survey
  9. 兴奋神经递质——谷氨酸与大脑健康
  10. android-keystool