返回顶部
首页 > 资讯 > 后端开发 > Python >Java Servlet异步请求开启的简单步骤
  • 575
分享到

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

2024-04-02 19:04:59 575人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 背景2. Servlet同步请求3. Servlet异步请求4. 异步Servlet使用方法5. spring中的实现例子附:异步对象监听器总结1. 背景 在研究长轮询的实

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异步请求开启内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java Servlet异步请求开启的简单步骤

本文链接: https://lsjlt.com/news/138185.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java Servlet异步请求开启的简单步骤
    目录1. 背景2. Servlet同步请求3. Servlet异步请求4. 异步Servlet使用方法5. Spring中的实现例子附:异步对象监听器总结1. 背景 在研究长轮询的实...
    99+
    2024-04-02
  • Java Servlet异步请求开启的示例分析
    这篇文章主要为大家展示了“Java Servlet异步请求开启的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java Servlet异步请求开启的示例分析”这篇文章...
    99+
    2023-06-29
  • servlet异步请求的实现
    目录1、什么是servlet异步请求2、Servlet异步请求示例2.1、示例准备2.2、实现自定义的Servlet2.3、异步任务2.4、测试场景1、什么是servlet异步请求 ...
    99+
    2024-04-02
  • Ajax异步请求的五个步骤及实战案例
    目录前言1.建立xmlHttpRequest异步对象2.创建HTTP请求(设置请求方法和URL)3.发送数据4.设置回调函数5.在回调函数中对不同的响应状态进行处理案例实现总结前言 ...
    99+
    2022-11-13
    ajax请求异步执行顺序 ajax异步请求的代码 ajax如何实现异步请求
  • java中怎么异步请求网络
    本篇文章给大家分享的是有关java中怎么异步请求网络,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。java怎么实现异步请求网络,这里实现思路有很多种,但是我们这里有个比较方便的...
    99+
    2023-06-02
  • ajax请求的步骤是什么
    Ajax请求的步骤如下:1. 创建XMLHttpRequest对象:通过`new XMLHttpRequest()`创建一个XMLH...
    99+
    2023-10-11
    ajax
  • C#/.Net开发chatGPT、openAI的简单步骤
    目录C#/.Net开发chatGPT、openAI获取TokenC#/.net调用接口API常用参数使用示例总结C#/.Net开发chatGPT、openAI 最近ChatGPT火爆...
    99+
    2023-02-06
    c#开发chatgpt chatGPT写代码 c#  openai
  • 异步请求和异步调用的区别有哪些
    这篇文章主要讲解了“异步请求和异步调用的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“异步请求和异步调用的区别有哪些”吧!异步请求和异步调用的区别...
    99+
    2024-04-02
  • Vue Axios与Vue.js:叩开异步请求的大门
    ...
    99+
    2024-04-02
  • Java中Servelt3异步请求方式是什么
    本篇内容介绍了“Java中Servelt3异步请求方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用同步请求模型,所有动作都交给同一...
    99+
    2023-06-16
  • 【Java】数据交换 Json 和 异步请求 Ajax
     🎄欢迎来到@边境矢梦°的csdn博文,本文主要讲解Java 中 数据交换和异步请求 Json&Ajax 的相关知识🎄 🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生...
    99+
    2023-08-31
    json ajax 前端
  • Spring Boot异步请求和异步调用的示例分析
    这篇文章主要为大家展示了“Spring Boot异步请求和异步调用的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring Boot异步请求和异步调用的示例分析”这篇文章吧。一、Sp...
    99+
    2023-06-16
  • Ajax请求中异步与同步的示例分析
    这篇文章主要为大家展示了“Ajax请求中异步与同步的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Ajax请求中异步与同步的示例分析”这篇文章吧。 ...
    99+
    2024-04-02
  • Java 异步编程教程:如何在http请求中实现异步编程?
    随着互联网技术的不断发展,越来越多的应用需要处理大量的网络请求。而在高并发场景下,同步的网络请求会导致线程阻塞,从而降低应用的性能。因此,采用异步编程模式可以有效地提高应用的性能和并发能力。本文将为你介绍如何在Java中实现异步编程,并通...
    99+
    2023-06-25
    异步编程 教程 http
  • Android HTTP网络请求的异步实现
    前言 大家都知道网络操作的响应时间是不定的,所有的网络操作都应该放在一个异步操作中处理,而且为了模块解耦,我们希望网络操作由专门的类来处理。所有网络数据发送,数据接收都有某几个...
    99+
    2022-06-06
    HTTP 异步 Android
  • Vue用Axios异步请求API的方法
    这篇文章主要介绍“Vue用Axios异步请求API的方法”,在日常操作中,相信很多人在Vue用Axios异步请求API的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vu...
    99+
    2024-04-02
  • Spring中注解方式的异步请求
    一、Servlet3.0异步请求 @WebServlet(value = "/async", asyncSupported = true) public class HelloA...
    99+
    2024-04-02
  • jquery异步请求的概念是什么
    本篇内容主要讲解“jquery异步请求的概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jquery异步请求的概念是什么”吧! ...
    99+
    2024-04-02
  • jquery异步请求的方法有哪些
    本篇内容介绍了“jquery异步请求的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • SpringIOC框架的简单实现步骤
    目录简单介绍具体实现首先,咱们先配置一下相关的jar包(pom.xml)创建一个Pet接口,存放方法say()创建一个Person类创建一个Dog类,继承Pet接口重点来了,配置ap...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作