阶段5 3.微服务项目【学成在线】_day04 页面静态化_21-页面静态化-静态化测试-静态化程序编写






public String getPageHtml(String pageId){
        /**
         * 静态化程序获取页面的DataUrl
         *
         * 静态化程序远程请求DataUrl获取数据模型
         *
         * 静态化程序获取页面的模板信息
         *
         * 执行页面静态化
         */
    }

定义getModelByPageId



定义一个专门的代码,用来表示页面找不到

CMS_PAGE_NOTEXISTS(false,24006,"页面不存在!"),


通过restTemplate方法获取dataUrl接口的数据


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)){
//页面dataurl为空
ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_DATAISNULL);
}
//通过restTemplate请求dataUrl获取数据
ResponseEntity<Map> forEntity = restTemplate.getForEntity(dataUrl, Map.class);
Map body = forEntity.getBody();
return body;
}
 

调用获取Map数据

获取页面模板

创建获取模板信息的方法:getTemplateByPageId

 private String getTemplateByPageId(String pageId){
        //取出页面信息
        CmsPage cmsPage = this.getById(pageId);
        if(cmsPage==null){
            ExceptionCast.cast(CmsCode.CMS_PAGE_NOTEXISTS);
        }
        //获取页面的模板Id
        String templateId = cmsPage.getTemplateId();
        if(StringUtils.isEmpty(templateId)){
            ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_DATAURLISNULL);
        }


    }

创建cmsTemplate的Dao

创建到接口:CmsTemplateRepository


在Service注入进来。

继续写方法 getTemplateByPageId下面的代码。拿到模板的id

    private String getTemplateByPageId(String pageId){
        //取出页面信息
        CmsPage cmsPage = this.getById(pageId);
        if(cmsPage==null){
            ExceptionCast.cast(CmsCode.CMS_PAGE_NOTEXISTS);
        }
        //获取页面的模板Id
        String templateId = cmsPage.getTemplateId();
        if(StringUtils.isEmpty(templateId)){
            ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_DATAURLISNULL);
        }
        //查询模板的信息
        Optional<CmsTemplate> optional = cmsTemplateRepository.findById(templateId);
        if(optional.isPresent()){
            CmsTemplate cmsTemplate = optional.get();
            //获取模板文件Id
            String templateFileId = cmsTemplate.getTemplateFileId();
            
        }

    }


直接复制刚才test内的代码

GridFSFile gridFsFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is("5dbeb89bface36388cb8c7d4")));
//打开一个下载流对象
GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(gridFsFile.getObjectId());
//创建GridFsResource对象,获取流
GridFsResource gridFsResource = new GridFsResource(gridFsFile, gridFSDownloadStream);
//从流中取数据
String content = IOUtils.toString(gridFsResource.getInputStream(), "utf-8");


需要注入这两个




这样主方法getPageHtml调用,获取到模板的内容

执行静态化

getPageHtml方法内

封装静态化方法generateHtml


静态化的方法单独封装一个 generateHtml。


processTemplateIntoString需要抛出异常

所以把异常换成Exception,异常类型是最高级别

 //执行静态化
    private String generateHtml(String templateContent,Map model){
        //创建配置文件
        Configuration configuration = new Configuration(Configuration.getVersion());
        //创建模板加载器
        StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
        stringTemplateLoader.putTemplate("template",templateContent);
        //想configuration配置模板加载器
        configuration.setTemplateLoader(stringTemplateLoader);
        //获取模板
        try {
            Template template = configuration.getTemplate("template");
            //调用api进行静态化
            String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
            return content;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

主方法最终调用 返回html内容


最终主方法


拿页面信息,拿到里面模板id,然后去查询gridFS,最终拿到模板文件的内容。然后就可以执行静态化

最终代码

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)){
            //页面dataurl为空
            ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_DATAISNULL);
        }
        //通过restTemplate请求dataUrl获取数据
        ResponseEntity<Map> forEntity = restTemplate.getForEntity(dataUrl, Map.class);
        Map body = forEntity.getBody();
        return body;
    }
    private String getTemplateByPageId(String pageId){
        //取出页面信息
        CmsPage cmsPage = this.getById(pageId);
        if(cmsPage==null){
            ExceptionCast.cast(CmsCode.CMS_PAGE_NOTEXISTS);
        }
        //获取页面的模板Id
        String templateId = cmsPage.getTemplateId();
        if(StringUtils.isEmpty(templateId)){
            ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_DATAURLISNULL);
        }
        //查询模板的信息
        Optional<CmsTemplate> optional = cmsTemplateRepository.findById(templateId);
        if(optional.isPresent()){
            CmsTemplate cmsTemplate = optional.get();
            //获取模板文件Id
            String templateFileId = cmsTemplate.getTemplateFileId();
            //**************************下面赋值过来的代码
            //根据文件id查询文件
            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;
    }
    //执行静态化
    private String generateHtml(String templateContent,Map model){
        //创建配置文件
        Configuration configuration = new Configuration(Configuration.getVersion());
        //创建模板加载器
        StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
        stringTemplateLoader.putTemplate("template",templateContent);
        //想configuration配置模板加载器
        configuration.setTemplateLoader(stringTemplateLoader);
        //获取模板
        try {
            Template template = configuration.getTemplate("template");
            //调用api进行静态化
            String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
            return content;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //生成静态页 主方法
    public String getPageHtml(String pageId){
        /**
         * 静态化程序获取页面的DataUrl
         *
         * 静态化程序远程请求DataUrl获取数据模型
         *
         * 静态化程序获取页面的模板信息
         *
         * 执行页面静态化
         */
        Map model = getModelByPageId(pageId);
        if(model==null){
            //数据模型取不到
            ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_DATAURLISNULL);
        }
        //获取页面的模板 信息
        String template = getTemplateByPageId(pageId);
        if(StringUtils.isEmpty(template)){
            ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_TEMPLATEISNULL);//页面模板为空
        }
        //执行静态化
        String html = generateHtml(template, model);
        return html;
    }
生成静态的几个方法

结束

原文地址:https://www.cnblogs.com/wangjunwei/p/11595128.html