Freemarker ★★★★★

简介

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本并输出。
FreeMarker不仅可以用作表现层的实现技术,类似于JSP的功能一样,而且还可以用于生成XML、HTML、JSP或Java源代码等文件。
目前企业中:主要用Freemarker做静态页面或是页面展示。

同类产品 velocity

download

Template:即模板,是以ftl为后缀的文件,类似于JSP的编写,拥有专门的模板语言FTL。
Java Objects:即数据,可以是简单类型(String,Number,Date),或者POJO、Map、List等对象。
Output:即文本输出,模板填充上数据之后,将会被模板对象通过输出流写成html文件或者其他文件。

总结:模板+数据 = 输出

pom

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>

jsp转ftl

1
2
拷贝jsp文件到 ftl文件夹下, 并进入,执行以下脚本
# jsp文件转ftl 生成html文件

shell_1 普通处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
for var in `find $PWD -type f -name "*.jsp"`
do
echo $var
var_destination=`echo $var | sed -e 's/.jsp/.ftl/'`
echo $var_destination
sed -e '/<%@.*/d' -e '/.*%>/d' -e '/<jsp:include/{s/jsp:/#/;s/page=//;s/.jsp/.ftl/;s/><\/jsp:include>/\/>/;}' $var > $var_destination

grep -n "<c:" $var_destination

if [ $? -eq 0 ];then
echo -e "\033[0;33;1m注意!!!注意!!! `echo $var_destination` 中有【<c:】标签\033[0m"
grep -n "<fmt:" $var_destination
if [ $? -eq 0 ];then
echo -e "\033[0;33;1m注意!!!注意!!! `echo $var_destination` 中有【<fmt:】标签\033[0m"
fi
else
echo -e "\033[0;32;1m`echo $var_destination` 修改完成 \033[0m"
grep -n "<fmt:" $var_destination
if [ $? -eq 0 ];then
echo -e "\033[0;33;1m注意!!!注意!!! `echo $var_destination` 中有【<fmt:】标签\033[0m"
else
echo -e "\033[0;32;1m`echo $var` 修改完成 \033[0m"
fi
fi
done

shell_2 逻辑处理(只能手动)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for var in `find $PWD -type f -name "*.ftl"`
do
grep -n "<c:" $var
if [ $? -eq 0 ];then
echo -e "\033[0;33;1m注意!!!注意!!! `echo $var` 中有【<c:】标签\033[0m"
grep -n "<fmt:" $var
if [ $? -eq 0 ];then
echo -e "\033[0;33;1m注意!!!注意!!! `echo $var` 中有【<fmt:】标签\033[0m"
fi
else
grep -n "<fmt:" $var
if [ $? -eq 0 ];then
echo -e "\033[0;33;1m注意!!!注意!!! `echo $var` 中有【<fmt:】标签\033[0m"
else
echo -e "\033[0;32;1m`echo $var` 修改完成 \033[0m"
fi
fi
done

MAC OS查看端口占用情况

1
sudo lsof -i :9000

参考:
http://blog.csdn.net/zkp0601/article/details/49765289

SPEL 调用类方法

1
Configuration configuration = new Configuration(Configuration.getVersion());
1
2
3
4
<bean id="configuration" class="freemarker.template.Configuration">
<!--<constructor-arg name="incompatibleImprovements" value="2.3.23"/>-->
<constructor-arg name="incompatibleImprovements" value='#{ T(freemarker.template.Configuration).getVersion()}'/>
</bean>

参考:
https://stackoverflow.com/questions/7585627/calling-static-methods-from-spring-security-expressions
http://blog.csdn.net/zhangguo5/article/details/62423345

freemarker 特殊符号 输出

参考:
http://blog.csdn.net/achilles12345/article/details/41820507

1
${r'${obj.name}'},这样最终显示的结果就是:${obj.name},而不会被freemarker解析。这里要注意,前边那个标红的“r”字符是关键点。
1
2
sed -e '/<jsp:include/{s/jsp:/#/;s/page=//;}'  item.jsp > item.ftl
# 注:如果需要使用多条命令,或者需要在某个地址范围内嵌套地址,就必须用花括号将命令括起来,每行只写一条命令,或这用分号分割同一行中的多条命令。