异步请求的基础概念

异步请求最直接的用法就是处理耗时业务,Http协议是单向的,只能客户端拉不能服务器主推.

异步请求的核心原理主要分为两大类:1.轮询.2长连接

轮询:就是定时获取返回结果.

长连接:客户端请求服务器后,连接不关闭,只有异步请求处理完成后才关闭连接.

Servlet3.0对异步请求的支持

  在Servlet3.0对异步请求的支持非常简单,只需要在请求的过程中调用request的startAsync即可,返回值为AsyncContext.AsyncContext为异步请求容器,它的作用就是保存与异步请求相关的所有信息,类似Servlet中的ServletContext.需要注意的是多次调用startAsync返回的是同一个AsyncContext.

public interface AsyncContext {
String ASYNC_REQUEST_URI = "javax.servlet.async.request_uri";
String ASYNC_CONTEXT_PATH = "javax.servlet.async.context_path";
String ASYNC_PATH_INFO = "javax.servlet.async.path_info";
String ASYNC_SERVLET_PATH = "javax.servlet.async.servlet_path";
String ASYNC_QUERY_STRING = "javax.servlet.async.query_string"; ServletRequest getRequest(); ServletResponse getResponse();//获取response boolean hasOriginalRequestAndResponse(); void dispatch();//用于将请求发往新地址(发往原来的地址) void dispatch(String var1);//用于将请求发往新地址(发往指定的地址) void dispatch(ServletContext var1, String var2);//用于将请求发往新地址(发往指定应用的指定地址) void complete();//用于通知容器,请求已经处理完成. void start(Runnable var1);//用于启动实际处理线程 void addListener(AsyncListener var1);//用于添加监听器 void addListener(AsyncListener var1, ServletRequest var2, ServletResponse var3); <T extends AsyncListener> T createListener(Class<T> var1) throws ServletException; void setTimeout(long var1);//设置超时时间 long getTimeout();
}

Servlet3.0处理异步请求三部曲

1.配置Servlet时将async-supported设置为true.

2.在servlet处理方法中调用Request的startAsync方法启动异步处理.

3.使用上面返回的AsyncContext处理异步请求.

配置web.xml

  <servlet>
<servlet-name>WorkServlet</servlet-name>
<servlet-class>controller.WorkSerlet</servlet-class>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>WorkServlet</servlet-name>
<url-pattern>/work</url-pattern>
</servlet-mapping>

深入理解Servlet3.0异步请求的更多相关文章

  1. Servlet3.0异步请求

    在Servlet3.0之前,Servlet采用Thread-Per-Request的方式处理请求 即每次Http请求都有一个线程从头到尾负责处理 如果一个请求需要进行IO操作,比如访问数据库.调用第三 ...

  2. Filter学习总结,顺便提及点servlet3.0异步filter和异步监听

      Filter介绍:     Filter在项目中经常可以用到,通常配置在web.xml中.是服务器端的一个组件,对于用户的请求和响应数据进行过滤操作,控制是否让用户访问到对应的web资源.常用于编 ...

  3. servlet3.0 异步处理

    转:https://blog.csdn.net/benjamin_whx/article/details/38874657 13.1.概述 计算机的内存是有限的.Servlet/JSP容器的设计者很清 ...

  4. Servlet3.0对异步处理的支持

    Servlet工作流程 Servlet 3.0 之前,一个普通 Servlet 的主要工作流程大致如下: Servlet 接收到请求之后,可能需要对请求携带的数据进行一些预处理: 调用业务接口的某些方 ...

  5. [译]servlet3.0与non-blocking服务端推送技术

    Non-blocking(NIO)Server Push and Servlet 3 在我的前一篇文章写道如何期待成熟的使用node.js.假定有一个框架,基于该框架,开发者只需要定义协议及相关的ha ...

  6. Servlet3.0的异步

    servlet之前的操作同时同步的,就是按照这样的一个流程来走的: 1.请求根据一个路径路由到一个servlet中, 2.servlet获取一系列的参数 3.执行一系列的逻辑(花费时间所占的比重也更大 ...

  7. 十三:Servlet3.0的异步

    servlet之前的操作同时同步的,就是按照这样的一个流程来走的: 1.请求根据一个路径路由到一个servlet中, 2.servlet获取一系列的参数 3.执行一系列的逻辑(花费时间所占的比重也更大 ...

  8. servlet3.0 新特性——异步处理

    Servlet 3.0 之前,一个普通 Servlet 的主要工作流程大致如下: 首先,Servlet 接收到请求之后,可能需要对请求携带的数据进行一些预处理: 接着,调用业务接口的某些方法,以完成业 ...

  9. 关于servlet3.0中的异步servlet

    刚看了一下维基百科上的介绍,servlet3.0是2009年随着JavaEE6.0发布的: 到现在已经有六七年的时间了,在我第一次接触java的时候(2011年),servlet3.0就已经出现很久了 ...

随机推荐

  1. python清除字符串中间空格的方法

    1.使用字符串函数replace >>> a = 'hello world' >>> a.replace(' ', '') 'helloworld' 看上这种方法真 ...

  2. Spec Explorer 工具学习

    基础概念:http://blogs.msdn.com/b/sechina/archive/2009/12/28/test.aspx 在线教程:http://blogs.msdn.com/b/sechi ...

  3. Python 编码(一)— Python3

    Unicode 什么是 Unicode 标准 unicode 标准 Unicode 为每个字符提供了一个独特的数字,并且跨平台.设备.应用或者编程语言都是通用的. -- 来自 http://unico ...

  4. 《UNIX网络编程》 -- 第五章

    str_cli 和 str_echo 函数 需要先弄清楚 3.9 readn.writen 和 readline 函数 str_cli void str_cli(FILE *fp, int sockf ...

  5. PHP多线程pthreads

    Home | 简体中文 | 繁体中文 | 杂文 | Search | ITEYE 博客 | OSChina 博客 | Facebook | Linkedin | 作品与服务 | EmailPHP 高级 ...

  6. Mac 安装Minikube

    环境信息: guoguo-MacBook-Pro-3:~ guoguo$ docker versionClient: Version:    17.12.0-ce API version:    1. ...

  7. SAP后勤模块实施攻略——1.ERP和SAP

    近日接到任务,看完乐立骏老师的SAP后勤模块实施攻略这本书,现在把第一章内容简单整理.第一章讲的是关于ERP和SAP的介绍. 1.ERP E:Enterprise / 企业 R:Resource / ...

  8. 0404-服务注册与发现-客户端负载均衡-两种自定义方式-Ribbon通过代码自定义配置、使用配置文件自定义Ribbon Client

    一.官方文档解读 官方地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_cust ...

  9. OpenCV3计算机视觉+python(二)

    不同色彩空间的转换 当前,在计算机视觉中有三种常用的色彩空间:灰度.BGR以及HSV 1.灰度色彩空间是通过去除彩色信息来将其转换为灰阶,灰度色彩空间对中间处理特别有效,比如人脸检测 2.BGR,即蓝 ...

  10. 蒙特卡罗树搜索(MCTS)【转】

    简介 最近AlphaGo Zero又火了一把,paper和各种分析文章都有了,有人看到了说不就是普通的Reinforcement learning吗,有人还没理解估值网络.快速下子网络的作用就放弃了. ...