我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java Servlet异步请求开启的简单步骤

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java Servlet异步请求开启的简单步骤

1. 背景

在研究长轮询的实现过程,有使用到Servlet3的异步请求。下面就来学习一下Servlet3的异步请求

现在Servlet的版本已经到了5

2. Servlet同步请求

以Tomcat服务器为例:

  • Http请求到达Tomcat
  • Tomcat从线程池中取出线程处理到达Tomcat的请求
  • 将请求Http解析为HttpServletRequest
  • 分发到具体Servlet处理对应的业务
  • 通过HttpServletResponse返回处理的数据

正常情况下请求模型和上面的模型一样,所有的请求交给Tomcat服务器的线程池处理,整个动作处理完成才释放回线程池。
这里就存在了一个问题如果后期的业务处理时间比较长。那么处理请求的线程就会被一直占用。当请求越来越多被占用的线程也会越来越多。直到被耗尽线程池中所有的线程。后续进来的就一直被阻塞等待线程来处理。

当用户不关心提交的返回可以定义业务处理线程池,前端请求提交后,Tomcat线程将处理提交给业务线程池立即返回。Spring 中的异步任务(@Async)就是这样的。

3. Servlet异步请求

同样以Tomcat服务为例:

  • 将请求Http解析为HttpServletRequest
  • 分发到具体Servlet处理,将业务提交给自定义业务线程池,Tomcat线程立刻被释放。
  • 当业务线程将任务执行结束,将会将结果转交给Tomcat线程池。
  • 通过HttpServletResponse返回处理的数据

引入异步Servlet3整体流程:

使用异步 Servelt,Tomcat 线程仅仅处理请求解析动作,所有耗时较长的业务操作全部交给业务线程池,所以相比同步请求, Tomcat 线程可以处理 更多请求。虽然将业务交给了业务流程处理,但是前端还在等待结果返回(同步等待返回)。

异步处理,前端会同步等待结果返回。很多人会觉得异步请求会返回更快。其实不然由于异步存在线程的切换。所有返回时间会比同步的慢。

虽然没有降低相应时间但是还是有其他明显的优点:

  • 可以处理更高并发连接数,提高系统整体吞吐量
  • 请求解析与业务处理完全分离,职责单一
  • 自定义业务线程池,我们可以更容易对其监控,降级等处理
  • 可以根据不同业务,自定义不同线程池,相互隔离,不用互相影响

4. 异步Servlet使用方法

使用异步Servlet只需要三步:

  • HttpServletRequest#startAsync() 获取 AsyncContext 异步上下文
  • 使用自定义业务线程池处理业务
  • AsyncContext#getResponse() 返回处理结果给前端,然后调用 AsyncContext#complete()

5. Spring中的实现例子

代码如下图:

  • 开启异步Servlet
  • 模拟业务执行
  • 返回结果给前端

前面有说过前端是一直在同步等待的我们通过运行代码来验证一下。结果如下图:

代码地址:github.com/mxsm/spring…

附:异步对象监听器

在异步对象完成、超时、错误或者开始时监听

        //获取异步上下文对象
        AsyncContext ac=req.startAsync();
        ac.addListener(new AsyncListener() {
            @Override
            public void onComplete(AsyncEvent asyncEvent) throws IOException {
                
            }

            @Override
            public void onTimeout(AsyncEvent asyncEvent) throws IOException {

            }

            @Override
            public void onError(AsyncEvent asyncEvent) throws IOException {

            }

            @Override
            public void onStartAsync(AsyncEvent asyncEvent) throws IOException {

            }
        });

总结

到此这篇关于Java Servlet异步请求开启的文章就介绍到这了,更多相关Servlet异步请求开启内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java Servlet异步请求开启的简单步骤

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java Servlet异步请求开启的示例分析

这篇文章主要为大家展示了“Java Servlet异步请求开启的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java Servlet异步请求开启的示例分析”这篇文章吧。1. 背景在研究
2023-06-29

Ajax异步请求的五个步骤及实战案例

通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新,下面这篇文章主要给大家介绍了关于Ajax异步请求的五个步骤及实战案例的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-13

C#/.Net开发chatGPT、openAI的简单步骤

OpenAI处于科技行业下一件大事件的最前沿,具有初创公司史诗般的标志,下面这篇文章主要给大家介绍了关于C#/.Net开发chatGPT和openAI的相关资料,需要的朋友可以参考下
2023-02-06

简单步骤:快速打开 5 个 Windows 上的 RAR 文件,仅需 11 步

如何在 Windows 11 上打开 RAR 文件?好吧,您应该知道,现在您很容易做到这一点。今年早些时候,在Build 2023大会上,Microsoft宣布Windows 11最终将获得对7-ZIP,TAR和下面列出的其他格式的本机支持
2023-08-17

java 实现开启异步线程的几种方式

在Java中,有多种方式可以实现异步线程以避免在主线程中执行耗时操作导致界面卡顿的问题。以下是几种常用的方式: 使用Thread类:可以使用Thread类来创建一个新的线程,并在其run()方法中执行耗时操作。例如: new Thread(
2023-08-17

学习matplotlib的简单指南:从零开始安装步骤

Python是一种非常流行的编程语言,它广泛用于各种应用程序和领域。Matplotlib是Python中最流行的可视化库之一,它提供了各种可视化工具,方便用户快速创建高质量的图表。在这篇文章中,我们将从零开始学习Matplotlib,了解其
学习matplotlib的简单指南:从零开始安装步骤
2024-01-17

Windows7开始菜单开启关闭最近使用的项目选项步骤

很多使用Win7系统的用户都不知道开始菜单中会有“最近使用的项目”这个选项,因为他们打开的开始菜单中并无此选项(如下图所示)。下面小编就告诉大家如何随心所欲的开启/关闭最近使用的项目。方法如下:1、鼠标右键任务栏,选
2023-06-14

从0开始简单部署腾讯云服务器的方法步骤

由于是第一次发帖,如有写得不好,不对的地方希望大家在评论里指出,以后改进。谢谢!!!。 下面开始: 一:购买腾讯云: 首先进入腾讯云的官网:https://cloud.tencent.com/fromSo
2022-06-04

在Linux系统中搭建Node.js开发环境的简单步骤讲解

1. Linux安装node.js ubuntu:sudo apt-get install nodejs npmcentos:yum install nodejs npm更详细的安装参见:https://github.com/joyent/
2022-06-04

开启阿里云服务器简单几步,轻松拥有自己的云端计算环境

随着云计算技术的发展,越来越多的企业和个人开始使用云服务器来满足自己的计算需求。阿里云作为国内领先的云计算服务提供商,其服务器具有高可用性、安全性、可扩展性等特点,深受广大用户欢迎。本文将详细介绍如何开启阿里云服务器,帮助你轻松拥有自己的云端计算环境。正文:一、注册阿里云账号首先,你需要在阿里云官网上注册一个账号
开启阿里云服务器简单几步,轻松拥有自己的云端计算环境
2023-11-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录