java 异步处理数据格式_spring mvc对异步请求的处理
在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对异步请求的处理相关推荐
- java spring 拦截器_Spring MVC拦截器(Interceptor)的配置及使用
在开发一个网站时可能有这样的需求:某些页面只希望几个特定的用户浏览.对于这样的访问权限控制,应该如何实现呢?拦截器就可以实现上述需求.在 Struts 2 框架中,拦截器是其重要的组成部分,Sprin ...
- java处理异步非阻塞请求_Spring WebFlux 的异步非阻塞处理
前言 随着 Web Servlet 技术栈的不断发展实现了异步处理与非阻塞 IO,但是其异步是不彻底的,因为受制于 Servlet 规范本身,比如其规范是同步的(Filter,Servlet)或阻塞( ...
- java性能最好的mvc框架_详解Spring MVC的异步模式(高性能的关键)
什么是异步模式 要知道什么是异步模式,就先要知道什么是同步模式,先看最典型的同步模式: 浏览器发起请求,Web服务器开一个线程处理,处理完把处理结果返回浏览器.好像没什么好说的了,绝大多数Web服务器 ...
- 高性能的关键:Spring MVC的异步模式
什么是异步模式 要知道什么是异步模式,就先要知道什么是同步模式,先看最典型的同步模式: (图1) 浏览器发起请求,Web服务器开一个线程处理,处理完把处理结果返回浏览器.好像没什么好说的了,绝大多数W ...
- 为ASP.NET MVC扩展异步Action功能(下)
本文分为上下两部分,您也可以从<Extend ASP.NET MVC for Asynchronous Action>获得全部内容. 执行Action方法 对于执行同步Action的Syn ...
- Spring MVC的异步模式DefferedResult
原文:http://www.importnew.com/21051.html 什么是异步模式 要知道什么是异步模式,就先要知道什么是同步模式,先看最典型的同步模式: (图1) 浏览器发起请求,Web服 ...
- java epoll select_Java 非阻塞 IO 和异步 IO
点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | HongJie 链接 | javadoop.com/post/nio-and-aio 本文将介绍非阻塞 IO 和异步 IO,也就是 ...
- java ee打印功能_Java EE:异步构造和功能
java ee打印功能 介绍 Java EE具有许多API和构造以支持异步执行. 从可伸缩性和性能的角度来看,这是至关重要的. 让我们假设2个模块相互交互. 当模块A (发送方)以同步方式向模块B ( ...
- java 怎么写异步方法_java如何学习异步编程?
昨天头儿给的学习文档我还没看完,头儿说:"MongoDB光会简单的添删改查什么的不行,要深入了解,你们连$set和$inc使用场景都分不清." 确实,学习过一年多SQL,确实对学习 ...
最新文章
- android系统默认铃声,Android系统修改默认铃声
- 【云计算虚拟化】Docker的基本命令使用
- ArcEngine的拓扑分析之ITopologicalOperator
- 4 C++对C的加强之namespace命名空间
- Mysql中的递归层次查询(父子查询)
- java 根据时间范围自动算间隔_Java根据开始时间结束时间计算时间间隔 x年x月x日...
- 怎么把arraylist集合的值放在实体类的属性了_原创 | 使用JPA实现DDD持久化-O/R映射元数据:类级映射-实体和值对象...
- python vbscript_将VBScript转换为Python
- PureFTP安装配置
- uml活动图 各个功能的操作流程和分支_做软件架构设计,你不得不知道这些图...
- SunnyOS准备4
- Mysql常用操作2
- 晚间看图片就高亮,这体验太差
- python编写端口扫描器_端口扫描器编写 python
- python忽略错误继续执行_python能在错误出现之后再进行处理吗?
- 解析新时代人工智能机器人的工作原理
- 2PC、XA、DTP与两阶段提交
- 隔离电源与非隔离电源的选择及优缺点分析
- 如何建立用户画像和用户体系?
- 创业公司感叹养不起程序员:他们的工资有泡沫吗? | 百度宣布开源自主驾驶软件...