zoukankan      html  css  js  c++  java
  • 阶段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;
        }
    生成静态的几个方法

    结束

  • 相关阅读:
    AX 2012 Security Framework
    The new concept 'Model' in AX 2012
    How to debug the SSRS report in AX 2012
    Using The 'Report Data Provider' As The Data Source For AX 2012 SSRS Report
    Deploy SSRS Report In AX 2012
    AX 2012 SSRS Report Data Source Type
    《Taurus Database: How to be Fast, Available, and Frugal in the Cloud》阅读笔记
    图分析理论 大纲小结
    一文快速了解Posix IO 缓冲
    #转载备忘# Linux程序调试工具
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/11595128.html
Copyright © 2011-2022 走看看