A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 谷粒姐姐 于 2019-1-9 11:40 编辑

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输入框:
[AppleScript] 纯文本查看 复制代码
<el‐form‐item label="数据Url" prop="dataUrl">   
<el‐input v‐model="pageForm.dataUrl" auto‐complete="off" >
</el‐input> 
</el‐form‐item>

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

[AppleScript] 纯文本查看 复制代码
//更新dataUrl one.setDataUrl(cmsPage.getDataUrl());

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

[AppleScript] 纯文本查看 复制代码
//页面静态化     
     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);    
     //获取模板

[AppleScript] 纯文本查看 复制代码
 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);

[AppleScript] 纯文本查看 复制代码
 }      
   //取出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方法,过程略。




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马