黑马程序员技术交流社区

标题: 【郑州校区】Java的新项目学成在线笔记-day4(五) [打印本页]

作者: 谷粒姐姐    时间: 2019-1-9 11:39
标题: 【郑州校区】Java的新项目学成在线笔记-day4(五)
本帖最后由 谷粒姐姐 于 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方法,过程略。









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2