在java领域,表现层技术主要有三种:jsp、freemarker、velocity。
优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能良好,据说比jsp性能还要好些
3、使用表达式语言,据说jsp的表达式语言就是学velocity的
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多。
3、对jsp标签支持不够好
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html>
<head>
<title>${title}</title>
</head>
<body>
<#include "first.ftl"/>
<lable>学号:</lable>${student.id}<br>
<lable>姓名:</lable>${student.name}<br>
<lable>地址:</lable>${student.address}<br>
学生列表:
<table border="1">
<#list students as s>
<#if s_index %2==0>
<tr style="color:red>
<#else>
<tr>
</#if>
<td>${s.id}</td>
<td>${s.name}</td>
<td>${s.address}</td>
</tr>
</#list>
</table>
<br>
<#if curdate ??>
当前日期:${curdate?string("yyyy/MM/dd HH:mm:ss")}
<#else>
curdate属性为null
</#if>
</body>
</html>
内容非常简单,跟平时经常写的html和jsp差不多。只是在标签格式上有所不同。
public void testFreeMarker()throws Exception{
//常见Configuration对象
Configuration configuration =new Configuration(Configuration.getVersion());
//告诉config对象模板文件的存放路径
configuration.setDirectoryForTemplateLoading(new File("E:\\eclipseworkspace\\taotao\\taotao-portal\\src\\main\\webapp\\WEB-INF\\demo.ftl"));
//设置config的默认字符集
configuration.setDefaultEncoding("utf-8");
System.out.println(configuration);
//从config对象中获得模板对象
Template template=configuration.getTemplate("second.ftl");
//创建模板需要的数据集
Map root=new HashMap<>();
root.put("title", "hello freemarker");
root.put("student", new Student(1,"张三","北京"));
root.put("curdate",new Date());
root.put("hello", "first中的hello");
List<Student>stuList=new ArrayList<>();
stuList.add(new Student(1,"张三","北京"));
stuList.add(new Student(2,"张三1","北京1"));
stuList.add(new Student(3,"张三2","北京3"));
stuList.add(new Student(4,"张三3","北京2"));
stuList.add(new Student(5,"张三4","北京5"));
stuList.add(new Student(6,"张三5","北京4"));
root.put("students", stuList);
//创建一个write对象,指定生成的文件保存的路径及文件名
Writer out =new FileWriter(new File("D:\\temp\\html\\demo.html"));
//调用模板对象的process方法生成静态文件
template.process(root, out);
//关闭writer对象
out.flush();
out.close();
}
需要特别注意的是,ftl文件中定义了的变量在后台一定要给出模板需要的数据集,不然会出错的。在实际项目中,我们经常就会把数据集的来源改成从数据库中获取。