在spring mvc3.2及以上版本增加了对请求的异步处理,是在servlet3的基础上进行封装的。

1、修改web.xml

<?xml version="1.0" encoding="UTF-8"?>

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">...

1.1、声明version="3.0",声明web-app_3_0.xsd

1.2、为servlet或者filter设置启用异步支持:true,修改WEB应用的web.xml

SpringMvc

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

...

1

true

2、使controller类支持async

2.1、返回java.util.concurrent.Callable来完成异步处理

packageorg.springframework.samples.mvc.async;importjava.util.concurrent.Callable;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.ExceptionHandler;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.ResponseBody;importorg.springframework.web.context.request.async.WebAsyncTask;

@Controller

@RequestMapping("/async/callable")public classCallableController {

@RequestMapping("/response-body")public @ResponseBody Callablecallable() {return new Callable() {

@Overridepublic String call() throwsException {

Thread.sleep(2000);return "Callable result";

}

};

}

@RequestMapping("/view")public Callable callableWithView(finalModel model) {return new Callable() {

@Overridepublic String call() throwsException {

Thread.sleep(2000);

model.addAttribute("foo", "bar");

model.addAttribute("fruit", "apple");return "views/html";

}

};

}

@RequestMapping("/exception")public @ResponseBody CallablecallableWithException(final @RequestParam(required=false, defaultValue="true") booleanhandled) {return new Callable() {

@Overridepublic String call() throwsException {

Thread.sleep(2000);if(handled) {//see handleException method further below

throw new IllegalStateException("Callable error");

}else{throw new IllegalArgumentException("Callable error");

}

}

};

}

@RequestMapping("/custom-timeout-handling")public @ResponseBody WebAsyncTaskcallableWithCustomTimeoutHandling() {

Callable callable = new Callable() {

@Overridepublic String call() throwsException {

Thread.sleep(2000);return "Callable result";

}

};return new WebAsyncTask(1000, callable);

}

@ExceptionHandler

@ResponseBodypublicString handleException(IllegalStateException ex) {return "Handled exception: " +ex.getMessage();

}

}

2.2、在异步处理完成时返回org.springframework.web.context.request.async.DeferredResult其他线程,例如一个JMS或一个AMQP消息,Redis通知等等:

@RequestMapping("/quotes")

@ResponseBodypublic DeferredResultquotes() {

DeferredResult deferredResult = new DeferredResult();//Add deferredResult to a Queue or a Map...

returndeferredResult;

}//In some other thread...

deferredResult.setResult(data);//Remove deferredResult from the Queue or Map

3、spring配置文件的修改

spring mvc的dtd的声明必须大于等于3.2

原文:http://www.cnblogs.com/yangzhilong/p/3725128.html

java 异步处理数据格式_spring mvc对异步请求的处理相关推荐

  1. java spring 拦截器_Spring MVC拦截器(Interceptor)的配置及使用

    在开发一个网站时可能有这样的需求:某些页面只希望几个特定的用户浏览.对于这样的访问权限控制,应该如何实现呢?拦截器就可以实现上述需求.在 Struts 2 框架中,拦截器是其重要的组成部分,Sprin ...

  2. java处理异步非阻塞请求_Spring WebFlux 的异步非阻塞处理

    前言 随着 Web Servlet 技术栈的不断发展实现了异步处理与非阻塞 IO,但是其异步是不彻底的,因为受制于 Servlet 规范本身,比如其规范是同步的(Filter,Servlet)或阻塞( ...

  3. java性能最好的mvc框架_详解Spring MVC的异步模式(高性能的关键)

    什么是异步模式 要知道什么是异步模式,就先要知道什么是同步模式,先看最典型的同步模式: 浏览器发起请求,Web服务器开一个线程处理,处理完把处理结果返回浏览器.好像没什么好说的了,绝大多数Web服务器 ...

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

    什么是异步模式 要知道什么是异步模式,就先要知道什么是同步模式,先看最典型的同步模式: (图1) 浏览器发起请求,Web服务器开一个线程处理,处理完把处理结果返回浏览器.好像没什么好说的了,绝大多数W ...

  5. 为ASP.NET MVC扩展异步Action功能(下)

    本文分为上下两部分,您也可以从<Extend ASP.NET MVC for Asynchronous Action>获得全部内容. 执行Action方法 对于执行同步Action的Syn ...

  6. Spring MVC的异步模式DefferedResult

    原文:http://www.importnew.com/21051.html 什么是异步模式 要知道什么是异步模式,就先要知道什么是同步模式,先看最典型的同步模式: (图1) 浏览器发起请求,Web服 ...

  7. java epoll select_Java 非阻塞 IO 和异步 IO

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | HongJie 链接 | javadoop.com/post/nio-and-aio 本文将介绍非阻塞 IO 和异步 IO,也就是 ...

  8. java ee打印功能_Java EE:异步构造和功能

    java ee打印功能 介绍 Java EE具有许多API和构造以支持异步执行. 从可伸缩性和性能的角度来看,这是至关重要的. 让我们假设2个模块相互交互. 当模块A (发送方)以同步方式向模块B ( ...

  9. java 怎么写异步方法_java如何学习异步编程?

    昨天头儿给的学习文档我还没看完,头儿说:"MongoDB光会简单的添删改查什么的不行,要深入了解,你们连$set和$inc使用场景都分不清." 确实,学习过一年多SQL,确实对学习 ...

最新文章

  1. android系统默认铃声,Android系统修改默认铃声
  2. 【云计算虚拟化】Docker的基本命令使用
  3. ArcEngine的拓扑分析之ITopologicalOperator
  4. 4 C++对C的加强之namespace命名空间
  5. Mysql中的递归层次查询(父子查询)
  6. java 根据时间范围自动算间隔_Java根据开始时间结束时间计算时间间隔 x年x月x日...
  7. 怎么把arraylist集合的值放在实体类的属性了_原创 | 使用JPA实现DDD持久化-O/R映射元数据:类级映射-实体和值对象...
  8. python vbscript_将VBScript转换为Python
  9. PureFTP安装配置
  10. uml活动图 各个功能的操作流程和分支_做软件架构设计,你不得不知道这些图...
  11. SunnyOS准备4
  12. Mysql常用操作2
  13. 晚间看图片就高亮,这体验太差
  14. python编写端口扫描器_端口扫描器编写 python
  15. python忽略错误继续执行_python能在错误出现之后再进行处理吗?
  16. 解析新时代人工智能机器人的工作原理
  17. 2PC、XA、DTP与两阶段提交
  18. 隔离电源与非隔离电源的选择及优缺点分析
  19. 如何建立用户画像和用户体系?
  20. 创业公司感叹养不起程序员:他们的工资有泡沫吗? | 百度宣布开源自主驾驶软件...

热门文章

  1. asp.net 子域跨域 带cookie
  2. 在MVVM模式下,ListBox的Command绑定
  3. Metro UI 的设计感悟
  4. PHP Lumen Laravel 解决validate方法自定义message无效的问题
  5. windows下用pip安装软件超时解决方案
  6. 社会内卷的真正原因:华为内部论坛的这篇短文讲透了
  7. 【实践】汽车之家推荐系统排序算法迭代之路.pdf(附下载链接)
  8. 解决datafountain比赛提交.csv文件报错问题
  9. 威斯康星大学乳腺癌肿瘤数据预测分类代码讲解
  10. FLOATER:更加灵活的Transformer位置编码!