JavaWeb 【基础】 servelet 异步操作

2023-11-09


在实际工作中我们会遇到一些耗时操作,这个时候如果不能及时response 就会返回失败,想要执行异步操作,延时返回数据,可以使用以下方法


使用asyncSupported = true注解

@WebServlet(name = "apitest", asyncSupported = true)

如果不使用这注解,访问时则会报错

\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20200718221455649.png

以下是源码

@WebServlet(name = "apitest", asyncSupported = true)
public class apitest extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		        doGet(request,response);
    }



    private volatile ExecutorService executorService;

    @Override
    public void init() throws ServletException {

        super.init();
        //newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
        executorService = Executors.newFixedThreadPool(100);
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        AsyncContext asyncCtx = request.startAsync();
        executorService.submit(new Runnable() {
            @Override
            public void run() {
				//延时5秒 ,模拟耗时操作
                try {
                    Thread.sleep (5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
				
                PrintWriter writer = null;
                try {
                    writer = asyncCtx.getResponse().getWriter();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //返回数据
                writer.println("servlevt异步处理成功");
                writer.flush();//记得关闭

                asyncCtx.complete();//记得关闭

            }
        }, asyncCtx);

    }
}

重启tomcat,访问接口/apitest , 可以看见,等待了5秒后,返回了servlevt异步处理成功。thread.sleep() , 这个一般不需要,实际应用中写耗时操作就行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb 【基础】 servelet 异步操作 的相关文章

随机推荐

  • java记录操作日志

    记录 logPointCut 方法只是用于定义切点 指定了哪些方法会被拦截 而获取方法上的 OperateLog 注解是为了在切面逻辑中判断是否需要记录操作日志 这两者是配合使用的 前者确定拦截的位置 后者确定在拦截的位置上是否执行操作日志
  • 大神之路-起始篇

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 涉及 企业运维 网络安全 应用开发 物联网 人工智能 大数据 学习知识 花开堪折直须折 莫待无花空折枝 作者主
  • DDOS网络层攻击防御

    TCP类报文攻击防御 目录 TCP类报文攻击防御 TCP交互过程 SYN Flood攻击 特点 概念 攻击原理 防御原理 一 针对虚假源 二 针对真实源 SYN ACK Flood攻击 攻击原理 防御原理 ACK Flood攻击 定义 攻击
  • ES6模块化语法

    定义 每个js 文件都是一个独立的模块 导入其他模块成员使用 import 关键字 export 命令用于规定模块的对外接口 基本语法 默认导入和导出 按需导入和导出 直接导入并执行模块中的额代码 1 默认语法 默认导出格式 export
  • MMSegmentation V0.27.0训练与推理自己的数据集(二)

    MMSegmentation 算法库目录结构的主要部分 mmsegmentation configs 配置文件 base 基配置文件 datasets 数据集相关配置文件 models 模型相关配置文件 schedules 训练日程如优化器
  • Pytorch resnet花朵识别(5种花)附完整代码

    notebook运行结果图 随机从各种花的图片集中抽取一定数量的图片 因为设备限制 用所有的图片 图片太多 如果用cpu跑太慢了 用gpu太多图片会out of memory 所以用小部分图片 了解方法就好了 重写dataset类 显示图片
  • mysql order by和group,where的执行顺序

    Mysql ORDER BY详解 0 索引 1 概述 2 索引扫描排序和文件排序简介 3 索引扫描排序执行过程分析 4 文件排序 5 补充说明 6 参考资料 1 概述 MySQL有两种方式可以实现ORDER BY 1 通过索引扫描生成有序的
  • 解决调试时候出现的“Encountered an improper argument”错误

    今天分享一个我们在调试时候出现的一个错误 同时这个错误让我的工程也崩了好几十次 错误 首先 我们看一下这个错误的提示框图 其错误提示为 Encountered an improper argument 翻译过来就是遇到不恰当的争论 错误原因
  • 多线程(七)锁策略 (乐观锁,悲观锁,读写锁,自旋锁,可重入锁)

    目录 一 乐观锁和悲观锁 1 乐观锁的理解 2 悲观锁的理解 二 读写锁 1 什么是读写锁 2 读写锁的三种状态 3 读写锁的实现 三 公平锁和非公平锁 四 可重入锁 1 可重入锁 2 可重入锁 VS 自旋锁 五 cas实现和synchro
  • 【java】id非自增的表怎么将数据批量插入数据库

    目录 示例 实体 service层 实现层 mapper mapper xml 技术框架 springboot dubbo mybatis plus id非自增的表怎么将数据批量插入数据库 mapper mapper xml都要改 示例 添
  • conda 导出环境/导入环境/导出base环境以及踩坑

    conda 导出环境 导入环境 导出base环境 参考链接 https blog csdn net shunaoxi2313 article details 92003710 conda的虚拟环境真的非常实用 尤其是对于大的深度学习项目 给
  • Longest Consecutive Sequence

    Given an unsorted array of integers find the length of the longest consecutive elements sequence For example Given 100 4
  • Java实现 LeetCode 704 二分查找(三种解法详解)

    二分查找常见三种解法详解 1 二分法 基础版 左闭右闭区间 2 二分法 改进版 左闭右开区间 3 二分法 平衡版 左闭右开区间 704 二分查找 给定一个 n 个元素有序的 升序 整型数组 nums 和一个目标值 target 写一个函数搜
  • Linux设置进程名称(标题) ( 7) -【Linux通信架构系列 】

    系列文章目录 C 技能系列 Linux通信架构系列 C 高性能优化编程系列 深入理解软件架构设计系列 高级C 并发线程编程 期待你的关注哦 现在的一切都是为将来的梦想编织翅膀 让梦想在现实中展翅高飞 Now everything is fo
  • MyBatis Generator 生成的example 使用 and or 简单混合查询

    MyBatis Generator 生成的example 使用 and or 简单混合查询 参考博客 https www cnblogs com kangping p 6001519 html 简单介绍 Example类用于构造复杂的筛选条
  • glTF格式初步了解

    glTF格式初步了解 最近看到Qt 3D的进展 偶然了解到了一种新的格式 glTF格式 这种格式据说比现有的3D格式更加符合OpenGL应用的需要 这引起了我的好奇 于是我在Qt 3D的外部链接中找到了有关glTF的相关链接 上海萌梦信息科
  • Mysql int(11)和Oracles nubmer(11) 的区别

    先说Mysql int 11 到底代表什么意思 这里的int 11 不是表示限制int的长度为11 而是字符的显示宽度 在字段类型为int时 无论你显示宽度设置为多少 int类型能存储的最大值和最小值永远都是固定的 那么这个显示宽度到底有什
  • Java中final关键字的作用

    final关键字可以用来修饰引用 方法和类 1 用来修饰一个引用 如果引用为基本数据类型 则该引用为常量 该值无法修改 如果引用为引用数据类型 比如对象 数组 则该对象 数组本身可以修改 但指向该对象或数组的地址的引用不能修改 如果引用为类
  • 开源DataX集成可视化项目Datax-Web的安装

    关于datax web项目 在做DataX项目测试的时候又收到github的推荐邮件 推荐了一个datax web的开源项目 这不是瞌睡遇到枕头 再研究研究这个项目是不是符合数据同步的要求 datax web https github co
  • JavaWeb 【基础】 servelet 异步操作

    在实际工作中我们会遇到一些耗时操作 这个时候如果不能及时response 就会返回失败 想要执行异步操作 延时返回数据 可以使用以下方法 使用asyncSupported true注解 WebServlet name apitest asy