<!-- 静态页面模版引擎的依赖 ? --> <dependency> ? ?<groupId>org.springframework.boot</groupId> ? ?<artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
引擎的具体实现原理
@Service public class PageServiceImpl implements PageService { ? ? ?@Autowired // 这个其实是selvert ? ?private TemplateEngine ?templateEngine; ? ? ?@Value("${pagepath}") // 在这里读取配置文件中的路径 ? ?private String pagepath; ? ? ?@Autowired // 调用静态页面要切换的数据 ? ?private SkuFeignClient skuFeignClient; ? ? ?@Override ? ?public void createPathHtml(String skuId) throws Exception { ? ? ? ?// WebContext webContext = new WebContext(req, resp, this.getServletContext()); ? ? ? ?// webContext.setVariable("persons", persons); ? ? ? ?Context context = new Context(); //在thymeleaf 包下面的用来存放数据的 来切换静态页面的数据 上下问对象 ? ? ? ?Map<String,Object> data ?= this.data(skuId); ? ? ? ?// Map<String,Object> 的参数 将数据传到 静态页面域中 ? ? ? ?context.setVariables(data); ? ?// 创建一个文件路径 ? ? ? ?File file = new File(pagepath); ? ? ? ?if (!file.exists()){ // 路径存在就跳过,不存在就创建一个 ? ? ? ? ? ?file.mkdirs(); // ? ? ? } ? ? ? ? ?File dist = new File(file,skuId+".html"); // 创建一个文件 ? ? ? ?PrintWriter printWriter = new PrintWriter(dist,"utf-8"); // 创建一个答应流文件 ? ? ? ?templateEngine.process("item",context,printWriter); // 模版 数据源 打印流 ? ? } /** 这个方法是处理前端要显示的数据 */ ? ?public Map<String,Object> data(String skuId){ ? ? ? ?Map<String, Object> info = skuFeignClient.info(skuId); ? ? ? ?// 将values 里的json数据转化为 字符串 ? ? ? ?String skuJson = JSON.toJSONString(info.get("tbSkuDTO")); ? ? ? ?// 将字符串转化为对象 ? ? ? ?TbSkuDTO skuDTO = JSON.parseObject(skuJson, TbSkuDTO.class); ? ? ? ?String[] images = skuDTO.getImages().split(","); ? ? ? ?info.put("images",images); ? ? ? ? ?String spuJson = JSON.toJSONString(info.get("tbSpuDTO")); ? ? ? ?TbSpuDTO spuDTO = JSON.parseObject(spuJson, TbSpuDTO.class); ? ? ? ?// 将通用对象里面存的json对象转化为Map集合 ? ? ? ?Map specMap = JSON.parseObject(spuDTO.getSpecItems(), Map.class); ? ? ? ?info.put("specMap",specMap); ? ? ? ?return info; ? } } ?
<html lang="en" xmlns:th="http://www.thymeleaf.org"> // 在线加载这个Thymeleaf 的使用 来动态展示数据