一. 点睛
在前面的文章SpringMvc4.x高级配置(三):服务器端推送技术之SSE中已经介绍了服务器端推送技术的第一种方案,下面演示第二种服务器端推送技术,基于Servlet3.0+
异步方法处理。
二. 示例
1.开启异步方法支持
在文件WebInitializer
的方法onStartup
末尾增加以下代码开启异步方法支持,代码如下:
1 | 复制代码servlet.setAsyncSupported(true);//① |
添加完成之后的代码如下所示:
1 | 复制代码 |
代码解释:
① 此句开启异步方法支持。
- 演示控制器
1 | 复制代码package org.light4j.springMvc4.web; |
代码解释:
异步任务实现是通过控制器从另外一个线程返回一个
DeferredResult
,这里的DeferredResult
是从pushService
中获得的。
① 定时任务,定时更新DeferredResult
。
② 返回给客户端DeferredResult
。
- 定时任务
1 | 复制代码package org.light4j.springMvc4.service; |
代码解释:
① 在
PushService
里产生DeferredResult
给控制器使用,通过@Scheduled
注解的方法定时更新DeferredResult
- 演示页面
在src/main/resources
下新建async.jsp
1 | 复制代码<%@ page language="java" contentType="text/html; charset=UTF-8" |
代码解释:
此处的代码使用的是
JQuery
的Ajax
请求,所以没有浏览器兼容性问题。
① 页面打开就向后台发送请求。
② 在控制台输出服务端推送的数据。
③ 一次请求完成后再向后台推送数据。
- 配置
在文件MyMvcConfig
上使用注解@EnableScheduling
开启计划任务的支持,代码如下:
1 | 复制代码@Configuration |
在文件MyMvcConfig
的方法addViewControllers
添加viewController
映射访问演示页面async.jsp
,代码如下:
1 | 复制代码registry.addViewController("/async").setViewName("/async"); |
添加完成之后的代码如下所示:
1 | 复制代码 |
- 运行
访问http://localhost/springMvc4.x-servlet3/async,可以看到网络不断的在获取服务器端推送的消息,如下图所示:
查看浏览器控制台可以看到不断的在打印消息,如下图所示:
三. 源代码示例:
打赏 欢迎关注人生设计师的微信公众账号
公众号ID:longjiazuoA
本文转载自: 掘金