3.4 静态化测试 上边章节完成了数据模型和模板管理的测试,下边测试整个页面静态化的流程,流程如下: 1、填写页面DataUrl 在编辑cms页面信息界面填写DataUrl,将此字段保存到cms_page集合中。 2、静态化程序获取页面的DataUrl 3、静态化程序远程请求DataUrl获取数据模型。 4、静态化程序获取页面的模板信息 5、执行页面静态化 3.4.1 填写页面DataUrl 修改页面管理模板代码,实现编辑页面DataUrl。 注意:此地址由程序员提供给系统管理员,由系统管理员录入到系统中。 下边实现页面修改界面录入DataUrl: 1、修改页面管理前端的page_edit.vue 在表单中添加dataUrl输入框:

<el‐form‐item label="数据Url" prop="dataUrl">  
<el‐input v‐model="pageForm.dataUrl" auto‐complete="off" >
</el‐input>
</el‐form‐item>

2、修改页面管理服务端PageService 在更新cmsPage数据代码中添加:

//更新dataUrl one.setDataUrl(cmsPage.getDataUrl());

3.4.2 静态化程序 在PageService中定义页面静态化方法,如下:

//页面静态化     
     public String getPageHtml(String pageId){   
     //获取页面模型数据        
 Map model = this.getModelByPageId(pageId);     
    if(model == null){        
    //获取页面模型数据为空   
          ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_DATAISNULL);    
     }     
   //获取页面模板 
        String templateContent = getTemplateByPageId(pageId);    
     if(StringUtils.isEmpty(templateContent)){      
      //页面模板为空     
        ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_TEMPLATEISNULL);      
   }   
     //执行静态化   
      String html = generateHtml(templateContent, model);    
     if(StringUtils.isEmpty(html)){    
        ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_HTMLISNULL);      
   }     
   return html;  
     }   
 //页面静态化  
   public String generateHtml(String template,Map model){  
      try {   
     //生成配置类   
      Configuration configuration = new Configuration(Configuration.getVersion());     
    //模板加载器   
      StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();    
     stringTemplateLoader.putTemplate("template",template);  
       //配置模板加载器      
   configuration.setTemplateLoader(stringTemplateLoader);    
     //获取模板
Template template1 = configuration.getTemplate("template");         String html = FreeMarkerTemplateUtils.processTemplateIntoString(template1, model);     
   return html;   
     } catch (Exception e) {       
    e.printStackTrace();    
    }  
     return null;    
  }  
 //获取页面模板  
  public String getTemplateByPageId(String pageId){    
   //查询页面信息       
 CmsPage cmsPage = this.getById(pageId);    
    if(cmsPage == null){   
        //页面不存在    
        ExceptionCast.cast(CmsCode.CMS_PAGE_NOTEXISTS);  
      }     
  //页面模板    
    String templateId = cmsPage.getTemplateId();    
    if(StringUtils.isEmpty(templateId)){    
       //页面模板为空      
      ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_TEMPLATEISNULL);   
     }      
 Optional<CmsTemplate> optional = cmsTemplateRepository.findById(templateId);   
     if(optional.isPresent()){    
       CmsTemplate cmsTemplate = optional.get();    
        //模板文件id      
     String templateFileId = cmsTemplate.getTemplateFileId();       
     //取出模板文件内容      
      GridFSFile gridFSFile =  gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(templateFileId)));       
     //打开下载流对象   
         GridFSDownloadStream gridFSDownloadStream =  gridFSBucket.openDownloadStream(gridFSFile.getObjectId());  
          //创建GridFsResource      
      GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFSDownloadStream);   
         try {       
        String content = IOUtils.toString(gridFsResource.getInputStream(), "utf‐8");        
        return content;        
    } catch (IOException e) {    
           e.printStackTrace();          
  }      
   }   
    return null;  
  }  
 //获取页面模型数据  
  public Map getModelByPageId(String pageId){ 
      //查询页面信息  
      CmsPage cmsPage = this.getById(pageId); 
      if(cmsPage == null){     
      //页面不存在
           ExceptionCast.cast(CmsCode.CMS_PAGE_NOTEXISTS);

}     
  //取出dataUrl      
  String dataUrl = cmsPage.getDataUrl();     
   if(StringUtils.isEmpty(dataUrl)){     
      ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_DATAURLISNULL);     
   }       
ResponseEntity<Map> forEntity = restTemplate.getForEntity(dataUrl, Map.class);     
   Map body = forEntity.getBody();   
     return body;   
   }

单元测试getPageHtml方法,过程略。