文档章节

【Java模板语言】TinyTemplate 实战 <一>:Serlvet集成

泥沙砖瓦浆木匠
 泥沙砖瓦浆木匠
发布于 2015/11/04 08:38
字数 979
阅读 756
收藏 22

Writer      :BYSocket(泥沙砖瓦浆木匠)

一、什么是TinyTemplate

什么是模板语言?

模板语言是为了使用户界面与业务数据(内容)分离而产生的,并能生成特定格式的文档。

什么是TinyTemplate?(开源项目地址入口

Tiny模板引擎是一个基于Java技术构建的模板引擎,它具有体量小、性能高和扩展易的特点。 适合于所有通过文本模板生成文本类型内容的场景,如:XML、源文件、HTML等等,可以说,它的出现就是为了替换Velocity模板引擎而来,因此在指令集上在尽量与Velocity接近的同时,又扩展了一些Velocity不能很好解决问题的指令与功能,在表达多方面则尽量与Java保持一致,所以非常地易学易用。

1. 体量小表现在总共不到5000多行的代码,去掉解析器近1000行,核心引擎只有4000多行代码。

2. 性能高表现在与现在国内几款高性能模板引擎如:Jetbrick、Webit等引擎的性能相比,近乎伯仲之间,但是比Velocity、Freemarker等则有长足的进步,效率大致是Velocity四倍。

3. 扩展性表现在Tiny框架引擎的所有环境都可以自行扩展,并与原有体系进行良好统一。

4. 易学习表现在Tiny框架概念清晰、模块划分科学、具有非常高的高内聚及低耦合。

5. 使用方式灵活表现在,可以多例方式、单例方式,并可以与Spring等有良好集成。

6. 友好的错误提示信息。


简要特点介绍:

1. 类似于 Velocity 的指令方式,相同或相似指令达90%左右

2. 支持可变参数方法调用

3. 支持类成员方法重载

4. 支持函数扩展

5. 采用弱类型方式,对于模板层的代码编写约束更小,模型层怎样变化,模板层的代码调整都非常容易

6. 支持宏定义#macro

7. 支持布局#layout

二、与Servlet集成,运行Hello,World

1. 新建一个quickstart.servlettemplate maven项目

在Eclipse中,new — Maven Project — “maven-archetype-quickstart“ …

在pom.xml添加对tinyTemplate的依赖:

<!-- 模板引擎对servlet的扩展依赖 -->
    	<dependency>
  			<groupId>org.tinygroup</groupId>
  			<artifactId>org.tinygroup.templateservletext</artifactId>
  			<version>2.0.26</version>
		</dependency>
如上代码,重写TinyServlet的handleRequest方法即可,然后在里面进行逻辑处理,return返回index.page。
4. 添加default.layout和index.page
default.layout:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<!--[if IE 7 ]>		 <html class="no-js ie ie7 lte7 lte8 lte9" lang="en-US"> <![endif]-->
<!--[if IE 8 ]>		 <html class="no-js ie ie8 lte8 lte9" lang="en-US"> <![endif]-->
<!--[if IE 9 ]>		 <html class="no-js ie ie9 lte9" lang="en-US"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!-->
<html class="no-js" lang="en-US"> <!--<![endif]-->
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <title>${pageTitle}</title>

    <script>
        var contextPath = "${TINY_CONTEXT_PATH}";
        var CKEDITOR_BASEPATH = contextPath+'/ckeditor/';

        /*
        jQuery.fn.outerHTML = function(s) {
            return (s) ? this.before(s).remove() : jQuery("p").append(this.eq(0).clone()).html();
        }
        */
    </script>


    <link rel="shortcut icon" href="${TINY_CONTEXT_PATH}/icon/logo.png">
    
 #if(DEBUG_MODE && DEBUG_MODE=="true")
	#foreach(component in uiengine.getHealthUiComponents())
	<!--UI component $component.name start -->
	#if(component.cssResource)
	#set(resources=component.cssResource.split(","))
	#foreach(path in resources)
	#set(path=path.trim())
	#set(newPath=path.replaceAll("[$][{]TINY_THEME[}]","${TINY_THEME}"))
	<link href="${TINY_CONTEXT_PATH}${newPath}" rel="stylesheet" />
	#end
	#end
	#if(component.jsResource)
	#set(resources=component.jsResource.split(","))
	#foreach(path in resources)
	#set(path=path.trim())
	<script src="${TINY_CONTEXT_PATH}${path}"></script>
	#end
	#end
	#if(component.jsCodelet)
	<script>
	$!{component.jsCodelet}
	</script>
	#end
	#if(component.cssCodelet)
	<style>
	$!{component.cssCodelet}
	</style>
	#end
	#end
 #else
  <link href="${TINY_CONTEXT_PATH}/uiengine.uicss" rel="stylesheet" />
  <script src="${TINY_CONTEXT_PATH}/uiengine.uijs"></script>
 #end
</head>
<body>
      #pageContent
</body>
</html>
index.page:
${name},欢迎来到Tiny的世界! 时间:${date}
5. 运行项目,右键项目 run as — maven build — “jetty:run”。访问 localhost:8080/项目名/index
image

三、小结

1、TinyTemplate的简介与特点

2、TinyTemplate与Servlet的配置(下一讲与SpringMVC的配置)

3、TinyTemplate最简单的也是最常用的取值语法${}

欢迎点击我的博客及GitHub — 博客提供RSS订阅哦!

———- http://www.bysocket.com/ ————- https://github.com/JeffLi1993 ———-

微         博:BYSocket  豆         瓣:BYSocket  FaceBook:BYSocket  Twitter    :BYSocket


© 著作权归作者所有

共有 人打赏支持
泥沙砖瓦浆木匠

泥沙砖瓦浆木匠

粉丝 802
博文 139
码字总数 170656
作品 4
杭州
程序员
私信 提问
加载中

评论(4)

红薯的小黄瓜
红薯的小黄瓜
轮子有点太多了吧
毛毛虫
毛毛虫
已阅
泥沙砖瓦浆木匠
泥沙砖瓦浆木匠

引用来自“HulkZ”的评论

已阅
HulkZ
HulkZ
已阅
TinyTemplate模板引擎火热出炉,正式开源了~~~

涉水模板引擎领域,纯属不小心。 在此对以下人员表示强烈感谢与致敬: @sub jetbrick作者 @sept @webit webit作者 @罗格林 rythm作者 @闲.大赋 beetl作者 以及许许多多虽然没有列出来,但是在...

悠悠然然
2014/06/18
0
29
Tiny模板引擎(Velocity Plus)应用示例

把TinyTemplate当成是Velocity的升级版其实也是可以的,毕竟它的语法是基到Veloccity扩展而来的,兼容度在80%以上。 至于TinyTemplate的实例是怎样的,且看下面: 宏的可变参数 在Java中的可...

悠悠然然
2015/02/05
0
8
TinyTemplate(Velocity Plus版)即将火热推出~~~

本来是没有自己写一个模板引擎的计划的,因为按我的理解,一直认识这种“语言”级的引擎,难度是非常大的。总感觉自己的水平不够,因此不敢有这个念头。直到大量使用Velocty的时候,碰到vel...

悠悠然然
2014/06/11
0
11
你做好准备参加一个活力四射的开源团队了吗?

关于Tiny框架更多的介绍,参见:http://www.tinygroup.org/ Tiny框架现有成员列表:http://www.tinygroup.org/about.page Tiny框架发起人博客:http://my.oschina.net/tinyframework/blog Ti...

悠悠然然
2014/06/25
1K
22
Tiny快速入门之Web界面快速开发实践

前面讲了基于Tiny做服务,这篇来讲讲用Tiny怎么做界面。f 下面是一些常用的链接,供大家使用: GIT地址(必须是OSC家的):https://git.oschina.net/tinyframework/tiny 问题报告:https://git...

悠悠然然
2014/11/25
0
43

没有更多内容

加载失败,请刷新页面

加载更多

区块链安全 - 以太坊短地址攻击

1 基础知识 EVM虚拟机在解析合约的字节码时,依赖的是ABI的定义,从而去识别各个字段位于字节码的什么地方。关于ABI,可以阅读这个文档: https://github.com/ethereum/wiki/wiki/Ethereum-C...

HiBlock
13分钟前
0
0
自定义函数及内部函数

变量的作用域 局部变量 global $Global及其他超全局数组 静态变量 仅初始化赋值 保留于内存直到response才销毁 global和static变量的区别 global:局部变量全局话 static:定义静态局部变量 函...

关元
14分钟前
0
0

中国龙-扬科
26分钟前
1
0
python包

https://www.lfd.uci.edu/~gohlke/pythonlibs/

陆朋
37分钟前
1
0
一文弄懂“分布式锁”,一直以来你的选择依据正确吗?

本文主要会关注的问题是“分布式锁”的问题。 多线程情况下对共享资源的操作需要加锁,避免数据被写乱,在分布式系统中,这个问题也是存在的,此时就需要一个分布式锁服务。 常见的分布式锁实...

Java干货分享
44分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部