技术标签: Freemarker
是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
jsp. velocity. freemarker优缺点
jsp是大家最熟悉的技术
优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。
velocity是较早出现的用于代替jsp的模板语言
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能良好,据说比jsp性能还要好些
3、使用表达式语言,据说jsp的表达式语言就是学velocity的
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多。
3、对jsp标签支持不够好
freemarker
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多
选择freemarker的原因:
1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签
5、可以实现严格的mvc分离
FTL指令(ftl(FreeMarker TemplatLanguage|)是Freemarker模板的文件后缀名)
1.assign指令:
此指令用于在页面上定义一个变量
<#assign linkman =“李先生”>
联系人:${linkman}
<#asssign info={“mobile”:“13888888888”,‘address’:‘北京市海淀区中关村街’}>
电话: ${info.mobile} 地址: ${info.address}
2.include 指令:
此指令用于模板文件的嵌套
创建模板文件 helloworld.ftl
<h1>helloworld<h1>
修改test.ftl,在末班文件中使用include指令引入helloworld模板
<#include “helloworld.ftl”>
3.if指令:(= ==没区别)
<#if success=true>
可以访问
<#else>
不可以访问
</#if>
4.list指令:
如果需要显示当前循环到第几项,可以这样写
<#list ["hello","world"] as word>
<span>${word_index+1},${hi}</span></br>
< /#list>
_has_next判断是否最后一项
有时候,最后一项在显示的时候可能要做特殊处理,例如不加逗号
<#list [“hello”,“world”] as word>
${word}<#if word_has_next>,</#if></#list>
break退出循环
如果想在循环中判断到某一项时退出,可以这样做
<#list users as user>
${
user.name}
<#if user.name == “administrator”><#break></#break>
< /#list>
5.转化jason字符串为数据:
<#assign text="{'bank':'花旗银行','account':'10101921233453020'}" />
<#assign data=text?eval />
开户行:${data.bank} 账号:${data.account}
6.日期格式化:
dataModel.put("today",new Date())
当前日期:${today?date} <br>
当前时间:${today?time} <br>
当前日期+时间:${today?datetime} <br> 日期格式化: ${today?string("yyyy年MM月")}
7.数字转字符串:
map.put("value",999);
经验值:${value}
8.判断变量是否存在:??
变量??,如果该变量存在,返回true,否则返回false
<#if aaa??>
aaa变量存在
<#else>
aaa变量不存在
</#if>
9 !:
${a ! ‘helloword’}
在代码中不对a赋值,也不会报错了 ,当a为null则返回!后边的内容-
文章浏览阅读526次。昨天电脑关机的时候,没有停止项目,直接关闭了MyEclipse,今天来打开之后项目都报错,提示 信息如下2018-7-19 13:56:54 org.apache.catalina.core.AprLifecycleListener init信息: Loaded APR based Apache Tomcat Native library 1.1..._error creating bean with name 'loadtask' defined in servletcontext resource
文章浏览阅读1.4k次。为什么80%的码农都做不了架构师?>>> ..._web版聊天窗口如何跨浏览器
文章浏览阅读5.6k次。目前很多软件都是通过网络验证来实现的,一种比较流行的方式便是把服务器端(如验证网页)放在服务器上,软件为客户端,当软件注册或启动时通过网络与服务器端进行数据交换,重新实现验证的目的。 个人觉得网络验证将是一种趋势,做得好的网络验证方式将是对软件的一种极大保护,如把软件的关键数据或关键代码放在服务器端,当认证通过后再发回到软件,且在传输过程中都用比较成熟的大型算法加密,从而达到一种防破解的..._网络验证转本地
文章浏览阅读255次。故障现象:修改前的注意事项:若您确定要将您笔记本预装的Windows 8系统改装为Windows 7系统,请注意如下重要事项:1. 由于您笔记本预装的Windows 8系统需要使用BIOS中的UEFI功能及GPT分区表,所以在您将系统改装为Windows 7系统时,需要将随机Windows 8系统的所有分区全部删除(包括Windows 8引导分区、Windows 8系统修复分..._出厂win8换win7注意事项
文章浏览阅读107次。序)很多时候其实问题很简单,问题在于自己懂得过于肤浅 项目中需要用到一个功能,机器人模拟和人类聊天,玩家说出一句话之后,机器人本能的和他开始聊天,这破B玩意儿我觉得只要有强大的词库和拆分算法,就那么点东西,但是要自己做还真是压力满满的。于是果断的在网上搜索,轻松的找到了这个东西: 这玩意儿给我的第一感觉就是实在,可以,完全能够满足需求,不过貌似它没有提供接口,这不是事儿,..._乱码 年 显示 骞
文章浏览阅读73次。 原博文出自于: http://blog.fens.me/hadoop-maven-eclipse/ 感谢! 用Maven构建Hadoop项目Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Ch...
文章浏览阅读728次。说明:(1)本程序信号开始时间为-T/2,得到的结果与设置的时延t0是一致的,方式2和方式3都能够定位到同一个时刻(2)与书本的结果不同;所以书本应该添加或者减少一个线性相位;不过这些不要紧,只要理解时域匹配滤波器和频域匹配滤波器就行matlab程序代码如下:% initial matlab workspace% figure 3.13; page 63clcclearclose all%% 参数设置% LFM脉冲宽度T 和 调频斜率KT = 7.2e-6;K = 4.1e12;_合成孔径雷达成像算法与实现 matlab
文章浏览阅读161次。一、php数据库操作1.连接到指定数据库header('Content-Type:text/html; charset=utf-8');// 第一步连接到数据库(@是不显示错误,一般调试时不加要@)$con= @mysql_connect('localhost','root','');//连接到指定的数据库mysql_select_db('db_name',$con)?>注意:(配置都正确的..._var_dump($ress);
文章浏览阅读579次。在点击某个部件,让其或者另外一个部件隐藏或显示Step0: 下载练习文件在这里下载AxureTraining.rp文件,并用Axure RP打开Step1: SETUP练习文档中打开"Show hidden widget" 页面,选择“语音气泡”图标通过单击检查器中得“样式工具栏“或者“样式选择框”中得“隐藏”复选框,来隐藏该部件。Step2: ADD ONCLICK INT..._axure shown
文章浏览阅读683次。Toolbar作为ActionBar使用介绍本文介绍了在Android中将Toolbar作为ActionBar使用的方法.并且介绍了在Fragment和嵌套Fragment中使用Toolbar作为ActionBar使用时需要注意的事项.使用support library的ToolbarAndroid的ActionBar每个版本都会做一些改变, 所以原生的ActionBar在不同的系统上看..._android开发 fragment中使用toolbar
文章浏览阅读147次。2015年05月18日 11:362705阿里移动安全实验室截获了一款仿冒美团应用的”美团红包”木马。用户安装木马后根据不同的参数,向服务器投递对应的数据,并上报用户敏感信息,包括:手机号,手机硬件及配置信息,用户的银行卡号,身份证号,姓名等各种敏感信息。美团应用安装量和使用频率非常高,而该仿冒木马应用迷惑性又极强,用户极其容易被诱骗安装受...
文章浏览阅读3k次。影响范围Polkit Pkexec漏洞类型本地权限提升利用条件影响范围应用漏洞概述Polkit是一个应用程序级别的工具集,通过定义和审核权限规则,实现不同优先级进程间的通讯,控制决策集中在统一的框架之中,决定低优先级进程是否有权访问高优先级进程Polkit在系统层级进行权限控制,提供了一个低优先级进程和高优先级进程进行通讯的系统,它和sudo等程序不同,Polkit并没有赋予进程完全的root权限,而是通过一个集中的策略系统进行更精细的授权,这个漏洞是本地触发,只有在获得有限_phexec提权