iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java Servlet异步请求开启的示例分析
  • 303
分享到

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

2023-06-29 01:06:21 303人浏览 安东尼
摘要

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

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

1. 背景

在研究长轮询的实现过程,有使用到Servlet3的异步请求。

2. Servlet同步请求

Tomcat服务器为例:

  • Http请求到达Tomcat

  • Tomcat从线程池中取出线程处理到达Tomcat的请求

  • 将请求Http解析为httpservletRequest

  • 分发到具体Servlet处理对应的业务

  • 通过HttpServletResponse返回处理的数据

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

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

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

3. Servlet异步请求

同样以Tomcat服务为例:

  • 将请求Http解析为HttpServletRequest

  • 分发到具体Servlet处理,将业务提交给自定义业务线程池,Tomcat线程立刻被释放。

  • 当业务线程将任务执行结束,将会将结果转交给Tomcat线程池。

  • 通过HttpServletResponse返回处理的数据

引入异步Servlet3整体流程:

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

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

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

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

  • 可以处理更高并发连接数,提高系统整体吞吐量

  • 请求解析与业务处理完全分离,职责单一

  • 自定义业务线程池,我们可以更容易对其监控,降级等处理

  • 可以根据不同业务,自定义不同线程池,相互隔离,不用互相影响

4. 异步Servlet使用方法

使用异步Servlet只需要三步:

  • HttpServletRequest#startAsync() 获取 AsyncContext 异步上下文

  • 使用自定义业务线程池处理业务

  • AsyncContext#getResponse() 返回处理结果给前端,然后调用 AsyncContext#complete()

5. Spring中的实现例子

代码如下图:

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

  • 开启异步Servlet

  • 模拟业务执行

  • 返回结果给前端

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

Java 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异步请求开启的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Java Servlet异步请求开启的示例分析

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Java Servlet异步请求开启的示例分析
    这篇文章主要为大家展示了“Java Servlet异步请求开启的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java Servlet异步请求开启的示例分析”这篇文章...
    99+
    2023-06-29
  • Java Servlet异步请求开启的简单步骤
    目录1. 背景2. Servlet同步请求3. Servlet异步请求4. 异步Servlet使用方法5. Spring中的实现例子附:异步对象监听器总结1. 背景 在研究长轮询的实...
    99+
    2024-04-02
  • Ajax请求中异步与同步的示例分析
    这篇文章主要为大家展示了“Ajax请求中异步与同步的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Ajax请求中异步与同步的示例分析”这篇文章吧。 ...
    99+
    2024-04-02
  • Spring Boot异步请求和异步调用的示例分析
    这篇文章主要为大家展示了“Spring Boot异步请求和异步调用的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring Boot异步请求和异步调用的示例分析”这篇文章吧。一、Sp...
    99+
    2023-06-16
  • javascript请求servlet实现ajax的示例分析
    小编给大家分享一下javascript请求servlet实现ajax的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!aj...
    99+
    2024-04-02
  • servlet异步请求的实现
    目录1、什么是servlet异步请求2、Servlet异步请求示例2.1、示例准备2.2、实现自定义的Servlet2.3、异步任务2.4、测试场景1、什么是servlet异步请求 ...
    99+
    2024-04-02
  • Ajax请求的示例分析
    这篇文章将为大家详细讲解有关Ajax请求的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、定义1、什么是AjaxAjax:即异步 JavaScript 和XML。Ajax是一种用于创建快速动态网...
    99+
    2023-06-29
  • jQuery中ajax请求struts action实现异步刷新的示例分析
    小编给大家分享一下jQuery中ajax请求struts action实现异步刷新的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!第一步:导入相关jar包,本样例需导入struts...
    99+
    2024-04-02
  • Servlet的示例分析
    这篇文章主要介绍了Servlet的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。有关Java Servlets    JavaTM servlet...
    99+
    2023-06-03
  • SpringSecurity系列之请求默认已开启防火墙的示例分析
    这篇文章给大家介绍SpringSecurity系列之请求默认已开启防火墙的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。自己写当然也可以实现,但是大部分情况下,大家都不是专业的 Web  安全工程师,...
    99+
    2023-06-17
  • ajax请求技术的示例分析
    这篇文章主要为大家展示了“ajax请求技术的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ajax请求技术的示例分析”这篇文章吧。1.写在前面:阅读要求...
    99+
    2024-04-02
  • Java中Servlet3.0异步处理的示例分析
    这篇文章主要介绍了Java中Servlet3.0异步处理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。通过本篇文章主要给大家讲解了在JAVA开发中Servlet3....
    99+
    2023-05-30
    java servlet3.0
  • ajax原始请求的示例分析
    这篇文章将为大家详细讲解有关ajax原始请求的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。XMLHttpRequest 对象简介浏览器与服务器之间,采用 HTTP 协议通信。用户在浏览器地址栏键...
    99+
    2023-06-22
  • JavaScript中异步的示例分析
    这篇文章将为大家详细讲解有关JavaScript中异步的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、异步解决方案的进化史JavaScript的异步操作一直是...
    99+
    2024-04-02
  • ES6 Fetch API HTTP请求的示例分析
    这篇文章主要为大家展示了“ES6 Fetch API HTTP请求的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ES6 Fetch API HTTP请...
    99+
    2024-04-02
  • ajax中多次请求的示例分析
    小编给大家分享一下ajax中多次请求的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们在用ajax请求数据时,可能会遇...
    99+
    2024-04-02
  • php中http请求类的示例分析
    这篇文章将为大家详细讲解有关php中http请求类的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码:<php namespace dollar...
    99+
    2024-04-02
  • C#异步通信的示例分析
    这篇文章主要为大家展示了“C#异步通信的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#异步通信的示例分析”这篇文章吧。C#异步通信概念及应用的认识首先让我们来看看:在网络编程中运用S...
    99+
    2023-06-17
  • js异步编程的示例分析
    这篇文章主要为大家展示了“js异步编程的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js异步编程的示例分析”这篇文章吧。异步回调是js的一大特性,理解...
    99+
    2024-04-02
  • SpringMVC异步处理的示例分析
    这篇文章主要介绍SpringMVC异步处理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!异步处理 demo如果要启用异步返回,需要开启 @EnableAsync。如下的代码中,使用 DeferredResu...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作