async-supported的作用
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的作用相关推荐
- php中jquery ajax请求参数,浅谈Jquery中Ajax异步请求中的async参数的作用
之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html asy.js function testAsync{ var temp; $.ajax( ...
- JS中关于async和defer作用与区别
<script src="script.js"></script> 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,"立即&q ...
- SpringBoot异步任务, 以及带返回值的异步任务(@Async 不起作用的原因)
第一部分: 无返回值异步任务 当没有加入异步任务的时候,我们创建一个service ,里面的方法需要等待3秒才能完成, controller层写一个测试方法调用时间返回的接口, 直接调用, 下面是se ...
- ajax on ture,Ajax请求中的async:false/true(同步/异步)的作用
async. 默认是true,即为异步方式,$.Ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.Ajax里的success方法,这时候执行的是两个线程.若要将其设置为fa ...
- 用 async/await 来处理异步
引用出处:https://www.cnblogs.com/SamWeb/p/8417940.html 昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简 ...
- python await原理_JavaScript async/await原理及实例解析
随着Node 7的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await. 异步编程的最高境界,就是根本不用关心它是不是异步. async 函数就是隧道尽头的亮光,很多人认为它 ...
- spring async 默认线程池_springboot:异步调用@Async
在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是顺序执行(不考虑多线程并发的情况),但是顺序执行的效率肯定是无法达到我们的预期的,这时就期望可以并行执行,常规 ...
- 为什么我们要使用Async、Await关键字
前不久,在工作中由于默认(xihuan)使用Async.Await关键字受到了很多质问,所以由此引发这篇博文"为什么我们要用Async/Await关键字",请听下面分解: Asyn ...
- 理解 JavaScript 的 async/await
随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.我第一次看到这组关键字并不是在 JavaScript 语言里,而是在 c# 5.0 的语法中.C# ...
- 在controller类的每个方法执行前调用某个方法_springboot:异步调用@Async
作者 | 迷茫中守候 来源 | urlify.cn/MbMN32 66套java从入门到精通实战课程分享 在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是 ...
最新文章
- 电脑键盘数字键失灵_C4D/3dmax/MaYa三维设计——高档机械键盘推荐·红轴(200元左右预算)...
- 数据结构—什么叫满K叉树?
- shell脚本接收输入
- 【LeetCode笔记】543. 二叉树的直径(Java、dfs、二叉树)
- 20180917 - 机器学习与线性回归
- 荣耀Magic V真机首曝:2022折叠机的引领之作
- 关于phpexcel读取时间字段的格式不正确
- 《你不知道的JavaScript》整理(二)——this
- 性能测试:竞品APP性能对比测试
- MATLAB 2018
- Oracle 10g 数据库服务器的安装
- android融云客服功能,客服开发指南 - 融云 RongCloud
- Android Camera2 教程 · 第三章 · 预览
- Web前端之仿携程首页布局
- 微信小程序封装分享与分销功能
- 20200724-Java-抽象类、接口
- OpenCV 学习笔记-day13 像素值统计 统计计算最大最小值,平均值和标准差 (minMaxLoc()和meanStdDev()函数的使用)
- MongoDB之增删改查全套语法锦囊⭐️【初学者福利】
- StarGAN-VC语音音色转换
- [EDI案例] 法雷奥/Valeo EDI解决方案
热门文章
- python操作符是什么意思_如何使用python操作符**与*?有什么区别?
- WEB 视频开发-视频播放器
- 嵌入式实践教程--Android HAL自定义HAL代码教程
- 计算机二级word海报体,2016年计算机二级《MSOffice》全真模拟试题
- cad编辑节点快捷键是什么_cad进入块编辑快捷键是什么,Auto CAD进入块编辑快捷键是什么?...
- 闭关之 Vulkan 应用开发指南笔记(二):队列、命令、移动数据和展示
- 用java实现猜数字游戏程序:基础、偏移、三次机会、是否继续玩
- 【论文阅读】Advances and challenges in conversational recommender systems: A survey
- 兴奋神经递质——谷氨酸与大脑健康
- android-keystool