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

相关文章
|
2月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
168 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
3月前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
90 2
|
9天前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
33 8
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
19天前
|
Java
Java基础却常被忽略:全面讲解this的实战技巧!
本次分享来自于一道Java基础的面试试题,对this的各种妙用进行了深度讲解,并分析了一些关于this的常见面试陷阱,主要包括以下几方面内容: 1.什么是this 2.this的场景化使用案例 3.关于this的误区 4.总结与练习
|
1月前
|
Java 程序员
Java基础却常被忽略:全面讲解this的实战技巧!
小米,29岁程序员,分享Java中`this`关键字的用法。`this`代表当前对象引用,用于区分成员变量与局部变量、构造方法间调用、支持链式调用及作为参数传递。文章还探讨了`this`在静态方法和匿名内部类中的使用误区,并提供了练习题。
36 1
|
2月前
|
安全 Java API
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
阿里云短信服务提供API/SDK和控制台调用方式,支持验证码、通知、推广等短信类型。需先注册阿里云账号并实名认证,然后在短信服务控制台申请资质、签名和模板,并创建AccessKey。最后通过Maven引入依赖,使用工具类发送短信验证码。
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
|
2月前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
70 6
|
2月前
|
缓存 监控 前端开发
Go 语言中如何集成 WebSocket 与 Socket.IO,实现高效、灵活的实时通信
本文探讨了在 Go 语言中如何集成 WebSocket 与 Socket.IO,实现高效、灵活的实时通信。首先介绍了 WebSocket 和 Socket.IO 的基本概念及其优势,接着详细讲解了 Go 语言中 WebSocket 的实现方法,以及二者集成的重要意义和具体步骤。文章还讨论了集成过程中需要注意的问题,如协议兼容性、消息格式、并发处理等,并提供了实时聊天、数据监控和在线协作工具等应用案例,最后提出了性能优化策略,包括数据压缩、缓存策略和连接管理优化。旨在帮助开发者更好地理解并应用这些技术。
94 3
|
2月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
3月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)

热门文章

最新文章