`
sunguanxing
  • 浏览: 1097313 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

模板技术的革命-fastm

阅读更多
Revolutionary Template Tech -- fastm
1. Overview
There are a lot of template techs on the world, like JSP, Taglib, Freemarker, Velocity, XSL, Jivan, XMLC, Tapestry, Wicket, JDynamiTe, etc.

For more info, please visit.

http://java-source.net/open-source/template-engines



The reason why I write “yet another template -- fastm” is just that I can not find a good enough one for me to use.



The templates fall into 2 categories:

(1) Script with logic (if, else, for); like JSP, Taglib, Freemarker, Velocity, XSL, Tapestry, etc.

(2) Resource without logic; like Jivan, XMLC, Wicket, fastm, etc.

Here I like to review these templates group by group to list their and disadvantages that I am not satisfied.


At first, people write HTML in the Servlet code. The code is polluted by the long HTML.

So JSP is made.  Then people write code in the HTML.  The HTML is polluted by code.

So Taglib is made. People write Taglib as code, since Taglib’s XML format seems look better than code in the HTML.

To display the Taglib in HTML Editors like Dreamweaver, Taglib Display Plugin is made. They are complex jobs.

As we can see, the whole thing is becoming more and more complex.

[size=medium]3. Freemarker, Velocity

Freemarker, Velocty are scripts containing logic like if, else, for, set, etc, which may affect the HTML display effect in the HTML browser.

4. Tapestry, Wicket
Tapestry, Wicket uses HTML tag as its logic tag or page component tag.

Tapestry contains logic like if, else, for, etc, while Wicket contains none.

Both Tapestry and Wicket have their own view model like Label, Link, Table, etc.

You have to write code to put your data into these view models.

5. Jivan, XMLC
www.jivan.org

Jivan and XMLC directly manipulate the HTML DOM node. Pure HTML, no any pollution.

You have to write code to put your data into the DOM node.

6. XSL
XSL directly manipulates the HTML DOM node too.

XSL can be seen as a little complex template script containing logic like match, choose, otherwise, etc.

7. JDynamiTe
http://sourceforge.net/projects/jdynamite

JDynamiTe ports PHPBB template to Java.

Like PHPBB template, you have to write code to search the resource block in the template and then use it.

To solve that problem, I wrote fastm.

8. fastm
Now it is fastm’s turn. Thanks for your patience. :-)

fastm tries to avoid above disadvantages and leverage their advantages.

fastm template is like PHPBB or JDynamiTe template, which uses XML comment as block mark and not contains any logic at all.



The formula of fastm is very simple and straight-forward:

Template DOM + Object DOM = Result HTML



For example, we have a list of User objects, which has name, address such properties.

We can display the users by following template



<!-- BEGIN DYNAMIC: users -->

Name: {name}

Address: {address}

<!-- END DYNAMIC: users -->



As we can see, XML Comment not affects HTML display effect in the Browser or HTML Editor like Dreamweaver.



For a if-else logic, like

<% if(name == null ){ %>

        No User Name Defined

<%}else if(isSuperUser(name)){%>

        Super User: <%= name %>

<%} else{%>

        Common User : <%= name %>

<%}%>



Fastm template should be:



<!-- BEGIN DYNAMIC: no_name -->

        No User Name Defined

<!-- END DYNAMIC: no_name -->



<!-- BEGIN DYNAMIC: super_user -->

        Super User: {name}

<!-- END DYNAMIC: super_user -->



<!-- BEGIN DYNAMIC: common_user -->

        Common User: {name}

<!-- END DYNAMIC: common_user -->



The logic is to be moved back to java code as:



Map map = new HashMap();

map.put(“name”, name);

If(name == null){
    map.put(“no_name”, map);

} else if(isSuperUser(name)){

    map.put(“super_user”, map);

}else{

    map.put(“common_user”, map);

}



Right. fastm template not supports script logic.

You have to write your logic in java code, like Jivan, XMLC, Wicket, etc.



As we can see, fastm is very easy and simple to use. And fastm has the fastest speed and smallest size among all template techs. 



9. The Good of Driving the Logic back to Java Code
(1) It solves the HTML code pollution. Template can be correctly displayed in the Browsers or HTML Editors.

(2) The logic in the Java code is easy to debug.

(3) The logic in the Java code is easy to reuse.



Here is the rationale of fastm:

Business logic is logic. Presentation logic is logic too.

Presentation logic should be organized neatly as Business logic too.

10. Designer friendly
fastm is quite “Designer friendly”.

fastm HTML template can be displayed correctly in the Browers or HTML editors. What you see is what you get”.

Microsoft provides XML formats of office documents.

For example, Excel (2002 or above) file can be saved and edited as XML format.

fastm works quite well for that too.

Fastm Excel XML template can be displayed correctly in the Excel too. “What you see is what you get”.

So in such kinds of “visual XML UI editors”, fastm has more advantages than scripts like JSP, Taglib, XSL, freemarker, velocity, Tapestry.

Wicket has the same “Designer friendly” effect as fastm too.

The most “Designer friendly” templates are Jivan, XMLC. They are just pure HTML, XML.

11. DOM Granularity, Reusability
Compared with XML DOM node, fastm Template DOM node is more flexible, since it is customized by user self.

For example, we want to display a list of users in two kinds of layout: list or table.



(1) XML DOM way


<ul>

<li> name: <span> show name here</span></li>

</ul>

 

<table>

<tr>

<td> name: <span> show name here</span></td>

</tr>

</table>





As we can see, the 2 DOM level are different.

“List” has 3 levels; “Table” has 4 levels.



You may need to write 2 sets of “DOM manipulation” code for the 2 DOMs.

The DOM can not be shared. You modified the DOM, and then output it.

Next time, you need to operation on a fresh-new DOM.



(2) fastm way


<ul>

<!-- BEGIN DYNAMIC: user -->

<li> name: {name}</li>

<!-- END DYNAMIC: user -->

</ul>

 

<table>

<!-- BEGIN DYNAMIC: user -->

<tr>

<td> name: {user}</td>

</tr>

<!-- END DYNAMIC: user -->

</table>





As we can see, both the “List” and “Table” templates have 2 levels.

We just need one set of code to get same Object DOM for the 2 Template DOMs.

Since the data is organized in the Object DOM, not directly put into the Template DOM, so the Template DOM can be shared. 

fastm Template DOM is read only and thread safe, which can be used any times by any number of concurrent programs.

12. Resource
The old version 1.0 alpha of fastm is on https://sourceforge.net/projects/fastm

The new version 1.0 M of fastm is on https://fastm.dev.java.net/

Please check the “Documents and Files”.

https://fastm.dev.java.net/servlets/ProjectDocumentList

That includes source, sample, doc of fastm1.0M, and view adapter for SpringMVC, WebWork.

https://fastm.dev.java.net/servlets/ProjectDocumentList?folderID=1552&expandFolder=1552&folderID=0



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/csdnbig/archive/2005/12/28/563885.aspx
分享到:
评论

相关推荐

    fastm

    这是一个开源的java技术,懂php的人知道php生成页面可以通过模版技术来实现,在java的web开发中,jsp,taglib,jstl等等都是动态的页面技术,因此有人就在开源社区写了个javaweb开发的模版工程,从此java web开发...

    fastm.jar

    fastm.jar fastm.jar

    bbs论坛源码项目1.zip

    CWBBS的模板技术受启发于Fastm及国内外知名的模板系统,着重于CWBBS社区的应用,并且通过plugin的方式,可以对模板进行扩展。模板目前主要应用于CMS和博客的首页。 通用模板通常是将模板文件预先解析,并以树的形式...

    lightweb-开源

    lightweb-轻量级Web框架一个非常简单,快速的Web框架,具有DispatchServlet,Action接口和Config Reading部分。 映射一个网址-&gt;一个动作实例。 lightweb非常适用于模板技术,例如Velocity,fastm。

    北航数理统计fisher判别例题及课后题MATLAB实现

    <项目介绍> - 北航数理统计fisher判别例题及课后题MATLAB实现 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    安装Linux操作系统注意事项

    linux

    校园失物招领网站(程序+数据库+报告)

    基于Spring Boot框架实现的校园失物招领网站,系统包含两种角色:管理员、用户,系统分为前台和后台两大模块,主要功能如下。 【前台】: - 首页留言板:展示用户对网站的留言和反馈信息。 - 公告信息:管理员发布的重要公告和通知信息。 - 失物信息:展示已发布的失物信息。 - 寻物启事:用户发布的寻物启事。 - 个人中心:用户可以查看和编辑个人信息。 【管理员】: - 个人中心:管理员可以查看和编辑个人信息。 - 管理员管理:管理员可以对其他管理员进行管理,包括添加、编辑和删除管理员账号。 - 操作日志管理:记录管理员的操作日志,包括登录、发布公告、删除失物信息等。 - 基础数据管理:管理员可以管理系统的基础数据,包括分类、标签等信息的添加、编辑和删除。 - 留言板管理:管理员可以管理首页留言板的留言信息,包括审核、删除等操作。 - 公告信息管理:管理员可以发布和管理系统的公告信息,包括添加、编辑和删除公告。 - 失物信息管理:管理员可以管理失物信息,包括审核、删除等操作。 - 寻物启事管理:管理员可以管理寻物启事,包括审核、删除等操作。 - 用户管理:管理员可以管理用户账号,

    【阿里妈妈-2024研报】消费热点|阿里妈妈热点指南VOL.22.pdf

    行业研究报告、行业调查报告、研报

    (源码)基于PyTorch的YOLOv5目标检测系统.zip

    # 基于PyTorch的YOLOv5目标检测系统 ## 项目简介 本项目是基于PyTorch框架实现的YOLOv5目标检测系统。YOLOv5是一种高效的目标检测算法,能够在实时场景中快速准确地检测出图像中的多个目标。本项目提供了完整的训练、预测和评估流程,支持自定义数据集的训练和模型性能的评估。 ## 项目的主要特性和功能 1. 高性能目标检测基于YOLOv5算法,能够在实时场景中高效地检测出图像中的多个目标。 2. 多模型支持支持YOLOv5的不同规模模型(如YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x),用户可以根据需求选择合适的模型。 3. 自定义数据集训练支持使用自定义数据集进行模型训练,用户可以根据自己的需求训练特定类别的目标检测模型。 4. 模型评估提供详细的模型评估功能,包括计算平均精度(mAP)和绘制性能曲线。 5. 多种预测模式支持单张图片预测、视频检测、FPS测试、目录遍历检测等多种预测模式。

    树莓派4B开发板上,通过Qt+FFMPEG以多线程分别解码、编码USB摄像头视频数据

     本项目为在树莓派4B开发板上,通过Qt+FFMPEG以多线程分别解码、编码USB摄像头视频数据。其中USB摄像头视频输入格式为MJPEG。通过树莓派的硬件编码器“h264_omx”进行硬件编码封装成mp4文件。详细说明见https://blog.csdn.net/wang_chao118/article/details/143743277?sharetype=blogdetail&sharerId=143743277&sharerefer=PC&sharesource=wang_chao118&spm=1011.2480.3001.8118

    Mobaxterm远程访问工具+支持xftp功能

    远程访问工具+支持xftp功能

    记录我的内核成长贡献之路IMO fork or clone this repo would be very stupi.zip

    c语言

    (源码)基于Arduino UNO的智能垃圾收集系统.zip

    # 基于Arduino UNO的智能垃圾收集系统 ## 项目简介 本项目是一个基于Arduino UNO的智能垃圾收集系统,旨在通过自动化技术提高垃圾处理的效率和环保性。系统能够自动区分湿垃圾和干垃圾,并在垃圾桶满时通知相关人员进行处理。此外,系统还设有奖励机制,鼓励用户积极参与垃圾分类。 ## 项目的主要特性和功能 1. 自动垃圾分类系统能够自动识别并分离湿垃圾和干垃圾,减少人工分类的工作量。 2. 满载通知当垃圾桶满时,系统会自动通知授权人员进行垃圾清理。 3. 奖励机制用户在正确投放垃圾后,系统会给予相应的奖励,激励用户积极参与垃圾分类。 4. 基于Arduino UNO系统核心采用Arduino UNO开发板,确保系统的稳定性和可扩展性。 ## 安装使用步骤 1. 硬件准备 确保所有硬件组件(如Arduino UNO、传感器、电机等)已正确连接并供电。 根据电路图检查所有连接,确保无误。 2. 软件准备

    Python毕业生信息审核系统源码.rar

    Python毕业生信息审核系统源码是一款专为教育机构设计的毕业生信息管理工具。该系统利用Python语言开发,旨在简化毕业生信息的审核流程,确保信息的准确性和完整性。核心功能包括: 信息录入:允许用户输入毕业生的基本信息,如姓名、学号、专业等。 数据验证:系统自动校验输入数据的格式和逻辑正确性,减少人工审核的错误。 审核管理:提供审核功能,管理员可以对毕业生信息进行审核,标记审核状态。 报告生成:系统能够根据审核结果生成毕业生信息报告,方便打印和存档。 源码开放,便于二次开发和功能扩展,适用于学校、学院等教育机构的毕业生信息管理。通过自动化处理,该系统大大提高了信息审核的效率和准确性。

    创维8A06机芯 E750A系列 通用主程序 电视刷机 固件升级包 Ver01.01

    升级方法为: 1、将所有需要升级的程序拷贝到U盘根目录下。 2、打开USBBOOT开关:开机,音量减到零,按住键控板上的音量减键的同时按遥控器上的屏显键(或返回键)进入工厂模式。进入“高级设置”选项(密码为123456),将“USBBOOT”改为“开”。 3、交流关机,插入u盘(请插在最下方的USB端口),拔掉其他usb接口上的usb设备,交流开机。 4、升级主程序会在电视界面上出现android机器人,其下方有升级进度,升级完成后会自动重启。 5、升级后第一次重启会比平时长3-5分钟,请勿在这个阶段关机,以避免由于数据拷贝出错导致的系统异常。 注意: 1、如果没有升级成功,请先确认USBBOOT项是否为开,检查是否插在最下方的端口(只有这个端口可以进行自动升级) 2、确认u盘是否符合要求并且根目录下存在需要的文件(aml_autoscript、update.zip、factory_update_param.aml和spim2c.bin) 3、或者使用其他u盘再试一下

    基于二阶锥约束的ieee33节点潮流计算

    基于二阶锥约束的ieee33节点潮流计算,运行环境需要matpower7.1,求解器为yalmip+gurobi。求解结果与matpower中的ieee33节点求解结果一致,可用于配电网故障重构,故障定位的基础代码。

    (源码)基于Arduino编程的冰箱警报系统.zip

    # 基于Arduino编程的冰箱警报系统 ## 项目简介 这是一个基于Arduino编程的项目,通过连接到冰箱门开关的警报系统来提醒用户冰箱门开启时间过长。用户可以在设定的时间内关闭冰箱门,否则警报会响起。项目使用LCD控制器面板来设置和配置警报延迟时间。 ## 项目的主要特性和功能 1. 警报功能在冰箱门开启后,系统会开始计时,如果用户在设定的时间内未关闭冰箱门,警报会响起。 2. LCD配置面板使用LCD控制器面板设置和配置警报延迟时间。 3. 可配置警报时间用户可以根据需要调整警报延迟时间。 4. 状态显示LCD面板显示冰箱门的状态(开启关闭)。 ## 安装使用步骤 1. 下载并解压项目文件。 2. 准备硬件部件根据提供的物料清单(Bill of Materials)准备所需的硬件部件。 3. 连接硬件部件按照项目文档中的连接表(Connection Table)将硬件部件连接到Arduino主板和LCD控制器面板。

    (源码)基于Java的学生管理系统.zip

    # 基于Java的学生管理系统 ## 项目简介 本项目是一个基于Java的学生管理系统,旨在提供一个简单而有效的平台来管理学生的基本信息。系统支持学生信息的增删改查操作,并提供了一个图形用户界面(GUI)以便于用户交互。 ## 项目的主要特性和功能 1. 学生信息管理支持添加、删除、更新和查询学生信息。 2. 登录功能提供管理员登录功能,确保系统的安全性。 3. 分页查询支持分页显示学生信息,方便用户浏览大量数据。 4. 数据持久化通过数据库操作实现学生信息的持久化存储。 5. 图形用户界面提供友好的GUI界面,方便用户进行操作。 ## 安装使用步骤 1. 下载源码从项目仓库下载源码文件。 2. 导入项目将项目导入到支持Java开发的IDE中(如Eclipse或IntelliJ IDEA)。 3. 配置数据库根据项目中的DBUtil类配置数据库连接信息。 4. 运行项目运行Main.java文件启动学生管理系统。

    【Unity着色器插件】Better Lit Shader 2021 增强光照和材质表现,在性能和美观度上做出平衡

    文件名:Better Lit Shader 2021 v1.1.43.unitypackage Better Lit Shader 2021 是一款在Unity中广受欢迎的着色器插件,主要用于增强光照和材质表现。它在性能和美观度上做出平衡,非常适合希望在Unity中实现高质量视觉效果的开发者,特别是那些想要获得逼真光照效果的项目。 主要功能 多光照支持:支持多个光源在场景中同时使用,例如主光源、补光和环境光等。Better Lit Shader 可以很好地处理这些光源,并能优化性能,使得不同光源间的叠加效果更加自然。 PBR(物理材质)支持:Better Lit Shader 完全支持物理材质渲染(PBR),提供了金属、粗糙度、法线贴图等标准PBR通道。它使得材质在光照下的反应更真实,尤其适合需要高度拟真效果的游戏或可视化项目。 基于HDRP和URP优化:Better Lit Shader 可以兼容Unity的高画质渲染管线(HDRP)和通用渲染管线(URP),并在这两个管线下都能提供优化的材质效果。对于不同管线,该插件提供了专门的预设和优化选项。 纹理贴图和混合:支持多种材

    (源码)基于Spring Cloud Alibaba的仿12306售票系统.zip

    # 基于Spring Cloud Alibaba的仿12306售票系统 ## 项目简介 本项目是一个仿照12306售票系统的微服务项目,采用Spring Cloud Alibaba、Spring Boot 3、JDK 17、MySQL、Redis、Nacos、Sentinel、Seata、RocketMQ等技术栈。项目实现了前后端分离,前端包括admin和web模块,后端包括gateway、member、business、batch等模块。 ## 项目的主要特性和功能 ### 会员模块 登录注册支持手机号+验证码的登录注册方式。 乘客管理用户可以为自己或他人购票。 余票查询查询某日起点到终点所有车次和余票。 车票购买选择一趟车,选择一个乘客,选择一个座位进行购票。 我的车票购买成功后查看车票。 ### 管理模块 基础车次维护维护车站、车次、车厢、座位、到站等信息。 每日车次维护生成每日车次数据。 会员管理查看所有会员。

Global site tag (gtag.js) - Google Analytics