Beetl模板引擎入门教程

最近项目中有个邮件发送的需求,不过要求发送的HTML格式的邮件。由于Beetl对java语言的良好支持和很好的性能,我们决定使用Beetl作为我们的模板引擎。

Beetl官网已经有了很详细的教程,所以本篇侧重于实战应用,适合需要不懂beetl或其他模板引擎但需要快速上手写出代码的人。

那么为什么要用模板引擎呢?很简单的原因,实际应用场景中文本的格式是固定的,但是内容有所不同。如果是不复杂的内容我们可以直接用代码生成需要的文本。但是当文本变得复杂的时候,我们用java生成文本的性能就会下降,同时也不利于维护。解决办法是将数据和格式进行分离,将一个文本分成模板和数据。模板中有固定的格式,需要动态变化的数据一般用占位符代替。这样我们想改模板格式的时候不需要去更改代码,只需要去改模板就可以了。同时模板引擎渲染文本的效率也会更高。

一、安装

Maven项目直接添加下面的依赖。

        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl-framework-starter</artifactId>
            <version>1.1.55.RELEASE</version>
        </dependency>

二、直接上手

Beetl的核心是GroupTemplate,创建GroupTemplate需要俩个参数,一个是模板资源加载器,一个是配置类。

    public void BeetlString() throws Exception {
        //new一个模板资源加载器
        StringTemplateResourceLoader resourceLoader = new StringTemplateResourceLoader();
        /* 使用Beetl默认的配置。
         * Beetl可以使用配置文件的方式去配置,但由于此处是直接上手的例子,
         * 我们不去管配置的问题,只需要基本的默认配置就可以了。
        */
        Configuration config = Configuration.defaultConfiguration();
        //Beetl的核心GroupTemplate
        GroupTemplate groupTemplate = new GroupTemplate(resourceLoader, config);
        //我们自定义的模板,其中${title}就Beetl默认的占位符
        String testTemplate="<html>\n" +
                "<head>\n" +
                "\t<title>${title}</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "\t<h1>${name}</h1>\n" +
                "</body>\n" +
                "</html>";
        Template template = groupTemplate.getTemplate(testTemplate);
        template.binding("title","This is a test template Email.");
        template.binding("name", "beetl");
        //渲染字符串
        String str = template.render();
        System.out.println(str);
    }

Beetl的使用很简单,我们首先需要一个模板资源加载器(实际上有六种不同的模板资源加载器),和Beetl的配置来创建Beetl核心GroupTemplate。

第二步,我们需要通过GroupTemplate将自己定义的String模板加载为Beetl模板——Template。

第三步,我们使用template中的操作,将数据和占位符绑定。

第四步,渲染最终的文本。

这样一个简单的Beetl例子就完成了,你可以运行一下试试看。渲染成功的结果应该是这样的:

<html>
<head>
    <title>This is a test template Email.</title>
</head>
<body>
    <h1>beetl</h1>
</body>
</html>

三、使用Map绑定

上面的例子中只有两个参数,我们单个绑定也不会觉得麻烦。实际使用可能会有相当多的参数,这时候我们直接绑定就会变得麻烦。Beetl支持使用Map来绑定参数。

    //...
    Map<String,String> map=new HashMap<String,String>()
    map.put("name", "beetl");
    map.put("title","This is a test template Email.");
    template.binding(map);
    //...
 

可以试着优化一下代码结构来更好地让数据和模板分离,比如函数的参数传入一个map。

四、使用循环语句

上一步我们使用了Map来绑定,这次我们要试试传入Map格式的数据,并在Beetl模板中使用循环语句遍历Map。

Beetl支持丰富的循环方式,如for-in,for(exp;exp;exp),以及while循环,以及循环控制语句break;continue; 另外,如果没有进入for循环体,还可以执行elsefor指定的语句。

模板中使用Beetl语法需要用<% %> 括起来。以下例子来自官方文档:

<%
for(entry in map){
        var key = entry.key;
        var value = entry.value;
        print(value);
}
%>

我们给出一个实际的例子:

   public void BeetlString() throws Exception {
        //...
        String testTemplate="<html>\n" +
                "<head>\n" +
                "\t<title>This is a test template Email.</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "\t<h1>beetl</h1>\n" +
                "<%" +
                " for(entry in map){" +
                "   print(entry.key+\":\"+entry.value);}%>"+
                "</body>\n" +
                "</html>";
        Template t = gt.getTemplate(testTemplate);
        t.fastBinding(map);
        Map<String,String> data=new HashMap<String,String>();
        data.put("test","213");
        data.put("aaa","123");
        //把map类型数据绑定到占位符map上,但在Beetl中使用循环时不需要用${}
        t.binding("map",data);
        String str = t.render();
        System.out.println(str);
    }

输出结果:

<html>
<head>
    <title>This is a test template Email.</title>
</head>
<body>
    <h1>beetl</h1>
aaa:123test:213</body>
</html>

五、条件语句

条件语句跟js的语法基本一致,没有特别的地方。但是请注意<%%>中不能使用占位符,否则会报错。

以下内容来自官方文档

if else

同js一样,支持if else,如下例子

<%
var a =true;
var b = 1;
if(a&&b==1){

}else if(a){

}else{

}
%>
switch-case

同js一样,支持switch-case,如下例子

<%
var b = 1;
switch(b){
        case 0:
                print("it's 0");
                break;
        case 1:
                print("it's 1");
                break;
        default:
                print("error");
}
%>

switch变量可以支持任何类型,而不像js那样只能是整形

select-case

select-case 是switch case的增强版。他允许case 里有逻辑表达式,同时,也不需要每个case都break一下,默认遇到合乎条件的case执行后就退出。

<%
var b = 1;
select(b){
        case 0,1:
                print("it's small int");
        case 2,3:
                print("it's big int");
        default:
                print("error");
}
%>

select 后也不需要一个变量,这样case 后的逻辑表达式将决定执行哪个case.其格式是

<%
select {
        case boolExp,orBoolExp2:
                doSomething();
}
%>

<%
var b = 1;
select{
        case b<1,b>10:
                print("it's out of range");
                break;
        case b==1:
                print("it's 1");
                break;
        default:
                print("error");
}
%>

转载于:https://www.cnblogs.com/rever/p/9321956.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Beetl相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,开发和维护模板有很好的体验。是新一代的模板引擎。总得来说,它的特性如下: 1、功能完备:同主流的java模板引擎相比,Beetl具有绝大多数功能。适用于各种应用场景,从对响应速度有很高要求的大网站到功能繁多的CMS管理系统都适合。Beetl本身还具有很多独特功能来完成模板编写和维护,这是其他模板引擎所不具有的。 2、非常简单:类似Javascript语法和习俗,只要半小时就能通过半学半猜完全掌握用法。拒绝其他模板引擎那种非人性化的语法和习俗。 3、超高的性能:Beetl 远超过主流java模板引擎性能,如5-6倍于freemarker,2倍于传统jsp技术。而且消耗较低的CPU 4、易于整合:Beetl能很容易的与各种web框架整合,如Spring MVC,JFinal,Struts,Nutz,Jodd,Servlet等。 5、支持模板单独开发和测试,即在MVC架构中,即使没有M和C部分,也能开发和测试模板。 6、扩展和个性化:Beetl支持自定义方法,格式化函数,虚拟属性,标签,和HTML标签。同时Beetl也支持自定义占位符和控制语句起始符号也支持使用者完全可以打造适合自己的工具包。 关于性能: 通过与主流模板引擎Freemarker,Velocity以及JSP对比,Beetl均远高于前面三个,这是因为宏观上,通过了优化的渲染引擎,IO的二进制输出,字节码属性访问增强,微观上,通过一维数组保存上下文,合并静态文本,通过重复使用字节数组来防止java频繁的创建和销毁数组,还使用模板缓存,运行时优化等方法。 独特功能: Beetl有些功能是发展了10多年的模板引擎所不具备的,这些功能非常利于模板的开发和维护,如下: 1、自定义占位符和控制语句起始符号,这有利于减小模板语法对模板的倾入性,比如在html模板中,如果定义控制语句符号是,那么,大部分模板文件都能同过浏览器打开。有的使用者仅仅采用了单个符号@ 以及回车换号作为控制语句起始符号,这又能提高开发效率。 2、可单独测试的模板。无需真正的控制层和模型层,Beetl的模板就可以单独开发和测试。 3、同时支持较为松散的MVC和严格的MVC,如果在模板语言里嵌入计算表达式,复杂条件表达式,以及函数调用有干涉业务逻辑嫌疑,你可以禁止使用这些语法。 4、强大的安全输出,通过安全输出符号!,能在模板变量,变量属性引用,for循环,占位符输出,try-catch中等各个地方提供安全输出,保证渲染正常。 5、模板变量:运行将模板的某一部分输出像js那样赋值个一个变量,稍后再处理。利用模板变量能完成非常复杂的页面布局(简单的布局可使用layout标签函数)。 6、类型推测,能在运行的时候推测模板变量类型,从而优化性能,也可以通过注解的方法显示的说明模板变量属性(这是非必须的,但有助于IDE自动提示功能)。 7、可插拔的设计,错误信息提示,模板引擎缓存机制,模板资源管理,本地调用的安全管理器,严格MVC限制,模板引擎本身都有默认的实现,但又完全可以自定义以适合特定需求。 8、增强的语法,如#ajax局部渲染,for-elsefor, select-case,安全输出符号! 等,这些语法特别适合模板开发。 9、性能超高,具有最快的模板解释引擎,同时,又有较低的CPU消耗。适合各类模板引用,如CMS系统,超高访问量的门户系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值