基于Servlet3.0的异步处理,springmvc的异步处理

控制器返回callable, spring mvc异步处理,将callable提交到TaskExecutor  使用一个隔离线程进行执行

DispatcherServlet和所有的Filter退出web容器的线程,但是response保持打开状态

Callable返回结果, Spring mvc 将请求重新派发给容器,回复之前的处理

根据Callable返回的结果,Springmvc继续进行视图渲染流程等(从收请求一直到视图渲染)

两次 preHandler哦

异步拦截器:

1 原生API的AsyncListener

2 Spring mvc 实现AsyncHandlerInterceptor

消息中间件的方式:

Spring mvc也有这样的类似的机制

Controller:

@Controller
public class SpringMVCAsyncController {
@ResponseBody
@RequestMapping("/createOrder")
public DeferredResult<Object> createOrder(){ //3秒没有响应 就报错
DeferredResult<Object> deferredResult = new DeferredResult<Object>((long)3000, "error: create fail...");
DeferredResultQueue.save(deferredResult);
return deferredResult;
}
@ResponseBody
@RequestMapping("/create")
public String create() {
//创建订单
String orderNum = UUID.randomUUID().toString();
//拿出上面保存的DeferredResultQueue
DeferredResult<Object> deferredResult = DeferredResultQueue.get();
deferredResult.setResult(orderNum); //设置订单号createOrder() 就会得到立即返回
return "success===>orderNum:"+orderNum;
} }

队列:

public class DeferredResultQueue {

   private static Queue<DeferredResult<Object>>    queue = new ConcurrentLinkedQueue<DeferredResult<Object>>();

   public static void save(DeferredResult<Object> deferredResult) {
queue.add(deferredResult);
} public static DeferredResult<Object> get() {
return queue.poll();
}
}

请求: 3秒没有赋值 就报错哈

Spring mvc异步处理的更多相关文章

  1. Spring MVC 异步处理请求,提高程序性能

    原文:http://blog.csdn.net/he90227/article/details/52262163 什么是异步模式 如何在Spring MVC中使用异步提高性能? 一个普通 Servle ...

  2. Spring MVC 异步测试

    从spring3.2开始,支持servlet3的异步请求,这对于处理耗时的请求如缓慢的数据库查询是非常有好处的,不至于很快的耗光servlet的线程池,影响可扩展性. 让我们先来了解一下servlet ...

  3. spring mvc 异步 DeferredResult

    当一个请求到达API接口,如果该API接口的return返回值是DeferredResult,在没有超时或者DeferredResult对象设置setResult时,接口不会返回,但是Servlet容 ...

  4. Spring MVC 异步请求 Callable

    对于有的请求业务处理流程可能比较耗时,比如长查询,远程调用等,主线程会被一直占用,而tomcat线程池线程有限,处理量就会下降 servlet3.0以后提供了对异步处理的支持,springmvc封装了 ...

  5. spring mvc 和ajax异步交互完整实例

    Spring MVC 异步交互demo: 1.jsp页面: <%@ page language="java" contentType="text/html; cha ...

  6. 高性能的关键:Spring MVC的异步模式

    我承认有些标题党了,不过话说这样其实也没错,关于“异步”处理的文章已经不少,代码例子也能找到很多,但我还是打算发表这篇我写了好长一段时间,却一直没发表的文章,以一个更简单的视角,把异步模式讲清楚. 什 ...

  7. spring mvc easyui tree 异步加载树

    使用spring mvc 注解 异步加载一棵树 jsp: <ul id="orgInfoTree"></ul> $(function(){ loadOrgT ...

  8. Spring MVC的异步模式

    高性能的关键:Spring MVC的异步模式   我承认有些标题党了,不过话说这样其实也没错,关于“异步”处理的文章已经不少,代码例子也能找到很多,但我还是打算发表这篇我写了好长一段时间,却一直没发表 ...

  9. spring mvc ajax异步文件的上传和普通文件上传

    表单提交方式文件上传和ajax异步文件上传 一:首先是我在spring mvc下的表单提交方式上传 ssm的包配置我就不一一详细列出来了,但是上传的包我还是列出来 这一段我也不知道怎么给大家讲解就是直 ...

随机推荐

  1. 荣誉墙项目day28 django常用函数

    1.在网页上渲染字符串from django.http import HttpResponsereturn HttpResponse(u"hello world") 2.渲染网页f ...

  2. Android 查看自己的keystore的别名及相关信息

    1.在DOS窗口下进入自己的keystore所在位置,输入 keytool -list  -v -keystore xxxx.keystore -storepass 密码 xxxx.keystore是 ...

  3. LInux中的文件系统1

    2017-03-08 10:37:55 一.虚拟文件系统VFS 文件系统用于将位于磁盘上的文件按照某种方式组织进内存,并给上层应用程序提供统一的访问接口.Linux支持多种文件系统EXT2/3,NTF ...

  4. MFC中使用用户剪贴板

    代码逻辑: 拷贝功能: 1.从编辑控件中获取文本. 2.打开并清空剪贴板.(OpenClipboard,EmptyClipboard) 3.创建一个全局缓冲区.(GlobalAlloc) 4.锁定缓冲 ...

  5. 理解Global interpreter lock

      Global interpreter lock (GIL) is a mechanism used in computer language interpreters to synchronize ...

  6. Linux ssh服务

    关于ssh服务不多说就提几句,1,机房的服务器一般都是通过远程连接登录的,远程登录就必然少不了ssh客户端.2,虚拟机每次都要点击进去,每次退出来也需要按Ctrl+Alt+Enter,也比较麻烦,有时 ...

  7. node.js---sails项目开发

    http://sailsdoc.swift.ren/ 这里有 sails中文文档 node.js---sails项目开发(1)安装,启动sails node.js---sails项目开发(2)安装测试 ...

  8. Java 利用监听器来实现记录用户访问网站次数

    假如有这么一个需求,要记录所有用户访问某一页面的次数. 最先想到的可能是在该Controller定义一个静态成员,然后在相应Action里自增.但这样有一个问题,就是Tomcat或者其他服务器重启的话 ...

  9. Django:学习笔记(9)——用户身份认证

    Django:学习笔记(9)——用户身份认证 User

  10. idea操作数据库

    1.View-->>Tool Windows-->>Database. 2.点击“+”号-->>选择Data Source-->>选择需要连接的数据库类 ...