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

1、修改web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> ... </web-app>
1.1、声明version="3.0",声明web-app_3_0.xsd
1.2、为servlet或者filter设置启用异步支持: <async-supported>true</async-supported> ,修改WEB应用的web.xml
<!-- spring mvc --> <servlet> <servlet-name>SpringMvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>...</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet>
2、使controller类支持async
2.1、返回java.util.concurrent.Callable来完成异步处理
package org.springframework.samples.mvc.async;
import java.util.concurrent.Callable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.async.WebAsyncTask;
@Controller
@RequestMapping("/async/callable")
public class CallableController {
@RequestMapping("/response-body")
public @ResponseBody Callable<String> callable() {
return new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);
return "Callable result";
}
};
}
@RequestMapping("/view")
public Callable<String> callableWithView(final Model model) {
return new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);
model.addAttribute("foo", "bar");
model.addAttribute("fruit", "apple");
return "views/html";
}
};
}
@RequestMapping("/exception")
public @ResponseBody Callable<String> callableWithException(
final @RequestParam(required=false, defaultValue="true") boolean handled) {
return new Callable<String>() {
@Override
public String call() throws Exception {
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 WebAsyncTask<String> callableWithCustomTimeoutHandling() {
Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);
return "Callable result";
}
};
return new WebAsyncTask<String>(1000, callable);
}
@ExceptionHandler
@ResponseBody
public String handleException(IllegalStateException ex) {
return "Handled exception: " + ex.getMessage();
}
}
2.2、在异步处理完成时返回org.springframework.web.context.request.async.DeferredResult其他线程,例如一个JMS或一个AMQP消息,Redis通知等等:
@RequestMapping("/quotes")
@ResponseBody
public DeferredResult<String> quotes() {
DeferredResult<String> deferredResult = new DeferredResult<String>();
// Add deferredResult to a Queue or a Map...
return deferredResult;
}
// In some other thread...
deferredResult.setResult(data);
// Remove deferredResult from the Queue or Map
3、spring配置文件的修改
spring mvc的dtd的声明必须大于等于3.2
<mvc:annotation-driven> <!-- 可不设置,使用默认的超时时间 --> <mvc:async-support default-timeout="3000"/> </mvc:annotation-driven>
实际使用示例:
function deferred(){
$.get('quotes.htm',function(data){
console.log(data);
deferred();//每次请求完成,再发一次请求,避免客户端定时刷新来获取数据
});
}
这么做的好处避免web server的连接池被长期占用而引起性能问题,调用后生成一个非web的服务线程来处理,增加web服务器的吞吐量~~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# springmvc的异步请求
# spring
# mvc
# 异步
# 异步请求
# 使用SpringBoot注解方式处理事务回滚实现
# spring boot注解方式使用redis缓存操作示例
# Spring AOP如何整合redis(注解方式)实现缓存统一管理详解
# Spring 使用注解方式进行事务管理配置方式
# spring mvc整合freemarker基于注解方式
# Spring-MVC异步请求之Servlet异步处理
# springmvc处理异步请求的示例
# SpringMVC环境下实现的Ajax异步请求JSON格式数据
# Spring中注解方式的异步请求
# 是在
# 基础上
# 可不
# 这么做
# 来完成
# 配置文件
# 再发
# 大家多多
# 客户端
# 增加了
# 连接池
# init
# param
# startup
# controller
# contextConfigLocation
# load
# DispatcherServlet
# async
# supported
相关文章:
如何高效生成建站之星成品网站源码?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
存储型VPS适合搭建中小型网站吗?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何快速选择适合个人网站的云服务器配置?
如何基于PHP生成高效IDC网络公司建站源码?
建站之星如何快速生成多端适配网站?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
如何基于云服务器快速搭建个人网站?
建站主机如何选?高性价比方案全解析
香港服务器选型指南:免备案配置与高效建站方案解析
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
网站制作模板下载什么软件,ppt模板免费下载网站?
建站之星如何快速解决建站难题?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
建站之星后台管理:高效配置与模板优化提升用户体验
如何用好域名打造高点击率的自主建站?
建站之星安装路径如何正确选择及配置?
官网网站制作腾讯审核要多久,联想路由器newifi官网
重庆网站制作公司哪家好,重庆中考招生办官方网站?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
独立制作一个网站多少钱,建立网站需要花多少钱?
html制作网站的步骤有哪些,iapp如何添加网页?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
已有域名和空间,如何快速搭建网站?
如何在IIS中新建站点并配置端口与物理路径?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何通过主机屋免费建站教程十分钟搭建网站?
详解jQuery中基本的动画方法
网站制作话术技巧,网站推广做的好怎么话术?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
b2c电商网站制作流程,b2c水平综合的电商平台?
如何解决VPS建站LNMP环境配置常见问题?
建站主机无法访问?如何排查域名与服务器问题
建站之星如何配置系统实现高效建站?
定制建站是什么?如何实现个性化需求?
教学论文网站制作软件有哪些,写论文用什么软件
?
教程网站设计制作软件,怎么创建自己的一个网站?
如何彻底删除建站之星生成的Banner?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
,如何利用word制作宣传手册?
如何快速查询域名建站关键信息?
已有域名如何免费搭建网站?
如何用PHP快速搭建高效网站?分步指南
高端网站建设与定制开发一站式解决方案 中企动力
*请认真填写需求信息,我们会在24小时内与您取得联系。