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

简介:

一、什么是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最简单的也是最常用的取值语法${}

相关文章
|
12天前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
60 1
|
1天前
|
Java Maven Windows
使用Java创建集成JACOB的HTTP服务
本文介绍了如何在Java中创建一个集成JACOB的HTTP服务,使Java应用能够调用Windows的COM组件。文章详细讲解了环境配置、动态加载JACOB DLL、创建HTTP服务器、实现IP白名单及处理HTTP请求的具体步骤,帮助读者实现Java应用与Windows系统的交互。作者拥有23年编程经验,文章来源于稀土掘金。著作权归作者所有,商业转载需授权。
使用Java创建集成JACOB的HTTP服务
|
7天前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
21 2
zabbix agent集成percona监控MySQL的插件实战案例
|
3天前
|
Java 开发者
Java中的多线程编程基础与实战
【9月更文挑战第6天】本文将通过深入浅出的方式,带领读者了解并掌握Java中的多线程编程。我们将从基础概念出发,逐步深入到代码实践,最后探讨多线程在实际应用中的优势和注意事项。无论你是初学者还是有一定经验的开发者,这篇文章都能让你对Java多线程有更全面的认识。
14 1
|
8天前
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
|
11天前
|
Java Devops 持续交付
探索Java中的Lambda表达式:简化代码,提升效率DevOps实践:持续集成与部署的自动化之路
【8月更文挑战第30天】本文深入探讨了Java 8中引入的Lambda表达式如何改变了我们编写和管理代码的方式。通过简化代码结构,提高开发效率,Lambda表达式已成为现代Java开发不可或缺的一部分。文章将通过实际例子展示Lambda表达式的强大功能和优雅用法。
|
11天前
|
Java
【实战演练】JAVA网络编程高手养成记:URL与URLConnection的实战技巧,一学就会!
【实战演练】JAVA网络编程高手养成记:URL与URLConnection的实战技巧,一学就会!
24 3
|
11天前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
12 3
|
11天前
|
Java C# 容器
Java代码的第一行实战
这段代码展示了Java的基本结构,包括`package`(包)、`public`(访问修饰符)、`class`(类)、`static`(静态)、`void`(空)及`System.out.println()`(系统输出)。同时介绍了Java中的注释、数据类型(如`byte`、`short`、`int`、`long`、`float`、`double`、`char`、`boolean`)、变量、常量、运算符、类型转换、赋值运算符、关系运算符与逻辑运算符等内容。通过生动的例子帮助理解各种概念。
16 2
下一篇
DDNS