# spring-mvc-co **Repository Path**: floatlu/spring-mvc-co ## Basic Information - **Project Name**: spring-mvc-co - **Description**: 基于spring mvc的big pipe实现 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 1 - **Created**: 2016-01-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Spring MVC CO基于Spring MVC开发,对BigPipe进行支持。基本思想是模块化的页面包含多个模块而其中有些模块可能存在数据准备慢的情况,这个时候我们不应该让页面响应的速度等于最慢的那个模块的响应时间,而是能让最快准备好数据的那个模块先渲染然后吐给客户端,我们有可能放弃渲染石板的那个模块而不是放弃整个页面。 开始: 1.Spring MVC配置文件引入Spring-mvc-co的命名空间: ``` ``` 同时配置annotation-driven。 2.基于Freemarker的模板编写,该模板包括同步返回的DOM结构和引入的模块配置。 ``` <#assign co=JspTaglibs["http://www.springframework.org/co"]> <@co.config timeout=3000/> ${index!} 模块1: <@co.module mapping="/co/module1"/> 模块2: <@co.module mapping="/co/module2" /> ``` 说明: <@co.config timeout=3000/> 代表页面模块的超时时间为3s,超过该时间的模块将被放弃。 <@co.module mapping="/co/module1"/>配置引入的模块,和RequestMapping对应。 Controller例子: ``` @Controller @RequestMapping("co") public class CoController { @RequestMapping("index") public String index(Model model, String name){ model.addAttribute("index", name); //返回数据和模板,同步返回 return "co/index"; } //ModelAndView并发执行和渲染 @RequestMapping("module1") public String module1(Model model, String name){ model.addAttribute("module1", name); try { //业务逻辑 Thread.sleep(1000); } catch (Exception e) { } //模块模板 return "co/module1"; } //ModelAndView并发执行和渲染 @RequestMapping("module2") public String module2(Model model, String name){ model.addAttribute("module2",name); try { //业务逻辑 Thread.sleep(800); } catch (Exception e) { } //模块模板 return "co/module2"; } } ```