beetl学习根据URL生成模板

官方文档: http://ibeetl.com/guide/#beetl

多谢beetl的作者抽空指点!!!

根据远程文件服务器生成模板:

需要注意的是:

  • StringTemplateResourceLoader:字符串模板加载器,用于加载字符串模板,如本例所示(根据url读取文件内容,然后根据这个对象生成Template对象)
  • FileResourceLoader:文件模板加载器,需要一个根目录作为参数构造,传入getTemplate方法的String是模板文件相对于Root目录的相对路径
  • ClasspathResourceLoader:文件模板加载器,模板文件位于Classpath里
  • WebAppResourceLoader:用于webapp集成,假定模板根目录就是WebRoot目录,参考web集成章
  • MapResourceLoader : 可以动态存入模板
  • CompositeResourceLoader 混合使用多种加载方式
protected void generateFile(String template, String filePath) {
        if(template.indexOf("http") != -1) {

            try {
                //创建一个URL实例
                URL url = new URL("http://xxx/xxx/wKgUFFub3CmAer4pAAABjPGvkcI576.btl");
                //通过URL的openStrean方法获取URL对象所表示的自愿字节输入流
                InputStream is = url.openStream();
                InputStreamReader isr = new InputStreamReader(is,"utf-8");

                //为字符输入流添加缓冲
                BufferedReader br = new BufferedReader(isr);
                String data = null;//读取数据
                StringBuffer sb = new StringBuffer();
                while ((data = br.readLine())!=null){//循环读取数据
                    data += "\r\n";
                    sb.append(data);
                }
                br.close();
                isr.close();
                is.close();
                StringTemplateResourceLoader resourceLoader = new StringTemplateResourceLoader();
                Configuration cfg = Configuration.defaultConfiguration();
                GroupTemplate gt = new GroupTemplate(resourceLoader,cfg);
                Template pageTemplate = gt.getTemplate(sb.toString());
                templateToFile(filePath, pageTemplate);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }else {
            Template pageTemplate = groupTemplate.getTemplate(template);
            templateToFile(filePath, pageTemplate);
        }
    }

    protected void templateToFile(String filePath, Template pageTemplate) {
        configTemplate(pageTemplate);
        if (PlatformUtil.isWindows()) {
            filePath = filePath.replaceAll("/+|\\\\+", "\\\\");
        } else {
            filePath = filePath.replaceAll("/+|\\\\+", "/");
        }
        File file = new File(filePath);
        File parentFile = file.getParentFile();
        if (!parentFile.exists()) {
            parentFile.mkdirs();
        }
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(file);
            pageTemplate.renderTo(fileOutputStream);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

原文地址:https://www.cnblogs.com/yxgmagic/p/9650414.html

时间: 2024-12-18 19:49:36

beetl学习根据URL生成模板的相关文章

Spring Boot学习记录(二)--thymeleaf模板

Spring Boot学习记录(二)–thymeleaf模板 标签(空格分隔): spring-boot 自从来公司后都没用过jsp当界面渲染了,因为前后端分离不是很好,反而模板引擎用的比较多,thymeleaf最大的优势后缀为html,就是只需要浏览器就可以展现页面了,还有就是thymeleaf可以很好的和spring集成.下面开始学习. 1.引入依赖 maven中直接引入 <dependency> <groupId>org.springframework.boot</gr

Laravel 深入理解路由和URL生成

在模板中我们一般不会直接写死url,而是用url助手生成url,本文介绍一下url助手的使用以及遇到的一些比较头疼的问题. 首先,我们创建了一个路由: Route::get('articles',['uses'=>'[email protected]','as'=>'articles.index']); 假设我们的项目部署在域名根目录,那么可以通过下面的url访问: http://localhost/articles 现在,我们在模板中生成链接,有几种方式: 简单模式 <a href=&

Data Url生成工具C#版 第二版

为什么有第二版 ??首先感谢 jenlynn 同学的留言"DATA URL两种生成方式,C#和HTML5 两者同一张生成的base64编码貌似不一样,能有什么方法让他们达成一致吗". ??其次,在研究这个问题时发现了Bug和异常. Bug:图片编码判断问题,不管什么扩展名的都默认使用了PNG编码. 异常:检测到 ContextSwitchDeadlock 界面预览 针对相关问题的改进方法 图片编码判断问题 之前主要是忘记了获取的扩展名前面是带点.的 相关代码: string ext =

think PHP URL生成

定义路由规则之后,我们可以通过Url类来方便的生成实际的URL地址(路由地址),针对上面的路由规则,我们可以用下面的方式生成URL地址. // 输出 blog/thinkphp Url::build('blog/read', 'name=thinkphp'); Url::build('blog/read', ['name' => 'thinkphp']); // 输出 blog/5 Url::build('blog/get', 'id=5'); Url::build('blog/get', ['

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器 bitset容器是一个bit位元素的序列容器,每个元素只占一个bit位,取值为0或1,因而很节省内存空间.下图是一个bitset的存储示意图,它的10个元素只使用了两个字节的空间. 使用bitset需要声明头文件"#include <bitset>" 1.创建bitset对象 创建bitset对象时,必须要指定容器的大小.bitset对象的大小一经定义,就不能修改了.下面这条语句就定义了bitset对

C++ Primer 学习笔记_23_标准模板库_stack.

C++ Primer 学习笔记_11_标准模板库_stack.queue队列容器与priority_queue优先队列容器 1.stack堆栈 stack堆栈是一个后进先出(Last In First Out,LIFO)的线性表,插入和删除元素都只能在表的一端进行.插入元素的一端称为栈顶,而另一端称为栈底.插入元素叫入栈(Push),删除元素叫出栈(Pop).下图是堆栈示意图 堆栈只提供入栈,出栈,栈顶元素访问和判断是否为空等几种方法.采用push()方法将元素入栈:采用pop()方法出栈:采用

Data Url生成工具之HTML5 FileReader实现

百度经验版本:如何用HTML5的FileReader生成Data Url 上一篇讲了:用Visual Studio 2010编写Data Url生成工具C#版 今天用HTML5 FileReader实现了一下Data Url生成工具,上代码吧: <!DOCTYPE html <html xmlns="http://www.w3.org/1999/xhtml" > <head> <meta http-equiv="Content-Type&q

c++学习笔记啊——类模板(1)

模板 模板是泛型编程的基础,能够处理在编译时不知道类型的情况 (1)模板函数 模板函数(function template) 一个模板函数就是一个公式,可以用来生成针对特定类型的函数版本,如下compare模板的例子 1 template < typename T > 2 int compare(const T&v1,const T&v2) 3 { 4 //其实只要返回一个值,后面的就不会再执行了 5 if(v1v2) return 1; 6 return 0; 7 } 函数说

C++ Primer 学习笔记_13_标准模板库_list双向链表容器

C++ Primer 学习笔记_13_标准模板库_list双向链表容器 list容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线性表,这样,对链表的任一位置的元素进行插入.删除和查找都是超快速的.下图是双向循环链表的结构示意图. list的每个节点有三个域:前驱元素指针域.数据域和后继元素指针域.前驱元素指针域保存了前驱元素的首地址:数据域则是本节点的数据:后继元素指针域则保存了后继元素的首地址.list的头结点的前驱元素指针域保存的是链表中尾元素的首地址,而list的尾