• 阶段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;
        }
    生成静态的几个方法

    结束

  • 相关阅读:
    decode函数
    下载
    sed命令
    JAVA中常用IO流类:FileInputStream和FileOutputStream
    /etc/sysconfig/i18n文件详解
    myeclipse注册方法
    Python标准库os的使用方法
    Python三方库PyAutoGUI的使用方法
    php获取文件创建时间、修改时间
    PHP获取今天、昨天、明天的日期
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/11595128.html
Copyright © 2020-2023  润新知