FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
页面的静态化 有的较多
中的注释都是以#号表示的
第一个项目结构
代码的实现
package cn.itcast.freemarker.model;
public class Group {
private String name;
String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Group(String name) {
super();
this.name = name;
}
public Group() {
}
public void sayHello(){
System.out.println("hello");
}
public void sayHello2(){
System.out.println("hello");
}
public void sayHello1(){
System.out.println("hello");
System.out.println("hello2");
System.out.println("hello3");
}
public void test(){
System.out.println("lisi");
System.out.println("wangwu");
System.out.println("wangwu");
}
}
package cn.itcast.freemarker.model;
public class User {
private int id;
private String name;
private int age;
private Group group;
private String ddd;
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void remove(){
}
}
package cn.itcast.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class FMutil {
/**
*
* @param ftlName:模板名称
* @param fileName:生成的页面名称
* @param map:数据
* @throws Exception
*/
public void ouputFile(String ftlName, String fileName, Map map) throws Exception{
//创建fm的配置
Configuration config = new Configuration();
//指定默认编码格式
config.setDefaultEncoding("UTF-8");
//设置模板的包路径,包的路径使用/来分隔
config.setClassForTemplateLoading(this.getClass(), "/ftl");
获得包的模板
Template template = config.getTemplate(ftlName);
//指定文件输出的路径
String path = "D:/fm";
//定义输出流,注意的必须指定编码
Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(path+"/"+fileName)),"UTF-8"));
//生成模板
template.process(map, writer);
}
}
fm1.ftl
${username}
fm2.ftl
Insert title here
${username}
fm3.ftl
Insert title here
${user.id}-------${user.name}-------${user.age}
<#-- 注释的写法-->
<#if user.age lt 10>
小孩
<#elseif user.age lt 16>
未成年
<#else>
已经成年
#if>
Insert title here
<#list userList as user>
<#-- list的索引变量名+"_index" -->
${user_index}---------${user.id}-----${user.name}-------${user.age}
#list>
Insert title here
<#include "/top1.ftl">
<#list userList as user>
${user.id}-----${user.name}-------${user.age}
#list>
fm6.ftl
Insert title here
<#-- 如果所取的属性值为空默认不处理会报错,如果想显示空(xxx.yy)!-->
${user.id}-----${user.name}-------${user.age}-----${(user.group)!}
${user.group!"空值"}
${(user.group.name)!}
<#-- 三层以上不如不加括号用!直接取值不成功必须加括号,按规范无论几层都加括号-->
${(a.b)!}
<#-- ()??非空判断-->
<#if (user.group)??>
不为空
<#else>
为空
#if>
fm6.ftl
Insert title here
<#assign name="zhangsan">
${name}
<#assign num=10>
${num+10}
<#assign num="10">
${num+10}
<#--布尔类型必须要转成字符串来输出-->
<#assign is=true>
${is?string}
${(a.b)???string}
<#-- 日期需要转成字符串输出 -->
${now?string("yyyy-MM-dd HH:mm:ss")}
<#--如果变量重复后边的变量值会覆盖前面的-->
<#assign bir="1985-04-22 12:33:33"?date("yyyy-MM-dd HH:mm:ss")>
${bir}
<#assign bir="1985-04-22 12:33:33"?datetime("yyyy-MM-dd HH:mm:ss")>
${bir}
<#-- 把html转成文本类型 -->
${"
"?html}
${"abcd"?left_pad(10,"-")}
${1.6?int}
fm7.ftl
Insert title here
<#assign name="zhangsan">
${name}
<#assign num=10>
${num+10}
<#assign num="10">
${num+10}
<#--布尔类型必须要转成字符串来输出-->
<#assign is=true>
${is?string}
${(a.b)???string}
<#-- 日期需要转成字符串输出 -->
${now?string("yyyy-MM-dd HH:mm:ss")}
<#--如果变量重复后边的变量值会覆盖前面的-->
<#assign bir="1985-04-22 12:33:33"?date("yyyy-MM-dd HH:mm:ss")>
${bir}
<#assign bir="1985-04-22 12:33:33"?datetime("yyyy-MM-dd HH:mm:ss")>
${bir}
<#-- 把html转成文本类型 -->
${"
"?html}
${"abcd"?left_pad(10,"-")}
${1.6?int}
productDetail.ftl
商品详细_移动商城_中国移动通信
- 结算购物车:123件
-
最新加入的商品
-
倍力通(Prestone)超级全合成机油5W-40 SM级 4L倍力通(Prestone)超级全合成机油5W-40 SM级 4L
¥3599x1
删除
-
倍力通(Prestone)超级全合成机油5W-40 SM级 4L倍力通(Prestone)超级全合成机油5W-40 SM级 4L
¥3599x1
删除
-
倍力通(Prestone)超级全合成机油5W-40 SM级 4L倍力通(Prestone)超级全合成机油5W-40 SM级 4L
¥3599x1
删除
-
倍力通(Prestone)超级全合成机油5W-40 SM级 4L倍力通(Prestone)超级全合成机油5W-40 SM级 4L
¥3599x1
删除
共4件商品 共计¥3599.00
去购物车结算
商品分类
销量排行榜
-
1.
- 摩托罗拉摩托罗拉托罗拉...
- 摩托罗拉摩托罗拉托罗拉拉摩托罗拉摩托罗拉托罗罗...
- 抢购价:¥3599
-
2.
- 摩托罗拉XT319
- 3G手机(黑)WCDMA/GSM 新品上市!!下单就返
- 抢购价:¥3599
-
3.
- 摩托罗拉XT319
- 3G手机(黑)WCDMA/GSM 新品上市!!下单就返
- 抢购价:¥3599
-
4.
- 摩托罗拉XT319
- 3G手机(黑)WCDMA/GSM 新品上市!!下单就返
- 抢购价:¥3599
-
5.
- 摩托罗拉XT319
- 3G手机(黑)WCDMA/GSM 新品上市!!下单就返
- 抢购价:¥3599
-
6.
- 摩托罗拉XT319
- 3G手机(黑)WCDMA/GSM 新品上市!!下单就返
- 抢购价:¥3599
-
7.
- 摩托罗拉XT319
- 3G手机(黑)WCDMA/GSM 新品上市!!下单就返
- 抢购价:¥3599
-
8.
- 摩托罗拉XT319
- 3G手机(黑)WCDMA/GSM 新品上市!!下单就返
- 抢购价:¥3599
-
9.
- 摩托罗拉XT319
- 3G手机(黑)WCDMA/GSM 新品上市!!下单就返
- 抢购价:¥3599
-
10.
- 摩托罗拉XT319
- 3G手机(黑)WCDMA/GSM 新品上市!!下单就返
- 抢购价:¥3599
我的浏览记录
-
- 摩托罗拉摩托罗拉拉...
- ¥3599 ~ ¥4599
-
- 摩托罗拉XT319
- ¥3599 ~ ¥4599
-
- 摩托罗拉XT319
- ¥3599 ~ ¥4599
-
- 摩托罗拉XT319
- ¥3599 ~ ¥4599
-
- 摩托罗拉XT319
- ¥3599 ~ ¥4599
商品描述
规格参数
包装信息
${(item.itemClob.itemDesc)! }
-
本产品全国联保,享受三包服务,质保期为:一年质保
如因质量问题或故障,凭厂商维修中心或特约维修点的质量检测证明,享受7日内退货,15日内换货,15日以上在质保期内享受免费保修等三包服务!
售后服务电话:400-830-8300
品牌官方网站:http://www.huawei.com/cn/
- 服务承诺:
-
中国移动手机购商城向您保证所售商品均为正品行货,自带机打发票,与商品一起寄送。凭质保证书及中国移动手机购商城发票,可享受全国联保服务,与您亲临商场选购的商品享受相同的质量保证。
中国移动手机购商城还为您提供具有竞争力的商品价格和运费政策,请您放心购买!(钟表除外)
注:因厂家会在没有任何提前通知的情况下更改产品包装、产地或者一些附件,本司不能确保客户收到的货物与商城图片、产地、附件说明完全一致。只能确保为原厂正货!并且保证与当时市场上同样主流新品一致。若本商城没有及时更新,请大家谅解!
- 权利声明:
- 中国移动手机购商城上的所有商品信息、客户评价、商品咨询、网友讨论等内容,是中国移动手机购商城重要的经营资源,未经许可,禁止非法转载使用。
欢迎${username}
package com.rl.test;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import cn.itcast.freemarker.model.User;
import cn.itcast.util.FMutil;
public class FMTest {
FMutil fm;
Map map ;
@Before
public void setUp() throws Exception {
fm = new FMutil();
map = new HashMap();
}
//静态页面生成 zhangsan
@Test
public void test1() throws Exception {
map.put("username", "zhangsan");
fm.ouputFile("fm1.ftl", "fm1.html", map);
}
@Test
public void test2() throws Exception {
map.put("username", "zhangsan");
fm.ouputFile("fm2.ftl", "fm2.html", map);
}
@Test
public void test3() throws Exception {
User user = new User();
user.setId(1);
user.setName("dalang");
user.setAge(30);
map.put("user", user);
fm.ouputFile("fm3.ftl", "fm3.html", map);
}
@Test
public void test4() throws Exception {
List userList = new ArrayList();
for(int i = 0 ; i < 10; i++){
User user = new User();
user.setId(1+i);
user.setName("dalang");
user.setAge(13+i);
userList.add(user);
}
map.put("userList", userList);
fm.ouputFile("fm4.ftl", "fm4.html", map);
}
@Test
public void test5() throws Exception {
List userList = new ArrayList();
for(int i = 0 ; i < 10; i++){
User user = new User();
user.setId(1+i);
user.setName("dalang");
user.setAge(13+i);
userList.add(user);
}
map.put("userList", userList);
map.put("username", "西门庆");
fm.ouputFile("fm5.ftl", "fm5.html", map);
}
@Test
public void test6() throws Exception {
User user = new User();
user.setId(1);
user.setName("dalang");
user.setAge(13);
map.put("user", user);
fm.ouputFile("fm6.ftl", "fm6.html", map);
}
@Test
public void test7() throws Exception {
map.put("now", new Date());
fm.ouputFile("fm7.ftl", "fm7.html", map);
}
}
pom.xml
4.0.0
org.konghao.freemarker
freemarker-hello
0.0.1-SNAPSHOT
jar
freemarker-hello
http://maven.apache.org
UTF-8
junit
junit
4.7
test
org.freemarker
freemarker
2.3.19