在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服务器的吞吐量~~
相关推荐
spring mvc3.2及以上版本增加了对请求的异步处理,是在servlet3的基础上进行封装的,有兴趣的可以了解一下。
一个实用了spring mvc和ajax异步请求的例子
最全的Spring MVC注解例子,异步请求,错误处理,是基于maven工程,很帮的一个Spring mvc注解例子。
系统前台与后台的交互全部使用 Ajax 异步请求 06. 自定义 SecureValid 注解实现权限的控制 07. 通过自定义 ExcludeLog 注解来实现对日志的记录进行排除 08. Spring mvc 返回数据格式采用统一的对象(JSONReturn...
本篇文章主要介绍了详解Spring MVC的异步模式(高性能的关键),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
22.2.2 Spring MVC对异步请求的支持297 22.2.3 WebAsyncTask和Callable类型异步请求的处理过程及用法301 22.2.4 DeferredResult类型异步请求的处理过程及用法303 22.2.5 ListenableFuture类型异步请求的处理过程...
【源码】mysql版本_spring3.0 系统模块 1....服务器内部GET POST 请求 25.uploadify 上传插件,单条、批量上传,带进度条,异步,图片、视频, 其它文件格式均可上传 26.地图选点获取经纬度坐标,根据俩经纬度计算距离
第四篇(第21章和第22章)总结整个SpringMVC架构知识并补充了异步请求相关的内容,涉及从更高层次分析SpringMVC的设计理念以及具体请求的处理过程,同时对异步请求进行了详细解析,帮助读者深入理解请求的实现方式。
【源码】oracle版本_spring3.0 系统模块 1....服务器内部GET POST 请求 25.uploadify 上传插件,单条、批量上传,带进度条,异步,图片、视频, 其它文件格式均可上传 26.地图选点获取经纬度坐标,根据俩经纬度计算距离
首先是常规的spring mvc环境搭建,不用多说,需要注意的是,这里需要引入jackson相关jar包,然后在spring配置文件“springmvc-servlet.xml”中添加json解析相关配置,我这里的完整代码如下: <?xml version=1.0 ...
概述使用Spring MVC 3.2(基于Servlet)的异步请求处理的聊天示例。 另请参阅分支以进行分布式聊天。笔记Tomcat中有一个错误会影响此示例。 请使用Tomcat 7.0.32或更高版本。指示Eclipse用户运行mvn eclipse:eclipse...
springmvc jquery ajax json 异步传递数据 springmvc异步传递请求 已包含全部源代码实现 把jar包放入 然后新建文件 配置xml !!!!! 全部资源
主要介绍了springmvc处理异步请求的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
发送API请求:在Vue.js组件中,使用Axios或其他HTTP库发送异步请求调用后端API。通过向后端发送请求并处理响应,实现前后端数据交互。 集成前后端:将前端Vue.js项目编译打包为静态资源(如HTML、JS、CSS文件等),...
Ajax实现异步请求+基于SpringMVC
37.4 Spring MVC异步集成 271 37.5 Spring MVC和CSRF集成 271 37.5.1自动令牌包含 271 37.5.2解析CsrfToken 272 第七部分 Spring数据集成 273 38. Spring Data&Spring安全配置 273 39. @Query中的安全表达式 273 第...
Spring MVC:负责处理前端请求和响应,采用MVC模式将应用分为模型、视图和控制器,以实现请求的处理和页面渲染。 MyBatis:作为持久层框架,MyBatis提供了对数据库的访问和操作,通过XML或注解映射SQL语句与Java方法...