FreeMarker整合Spring生成静态页面

FreeMarker

什么是freemarker

        FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

        目前企业中主要用Freemarker做静态页面或是页面展示

freemarker原理


freemarker的使用方法

首先,添加依赖

<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.23</version>
</dependency>

使用步骤:

首先需要创建一个模板文件:

  模板内容: 

如果之前没有在Eclipse中安装过相应的插件,会有弹窗提示安装插件,不过说实话,并没有什么用,很不智能......


然后先进行简单测试:

@Test
public void testFreeMarker() throws Exception {
	// 创建一个模板文件
	// 创建一个Configuration对象
	Configuration configuration = new Configuration(Configuration.getVersion());
	// 设置模板文件保存的目录
	configuration.setDirectoryForTemplateLoading(new File("D:/WorkSpace/workspace/e3-item-web/src/main/webapp/WEB-INF/ftl/"));
	// 设置文件的编码格式,一般是utf-8
	configuration.setDefaultEncoding("utf-8");
	// 加载一个模板文件,创建一个模板对象
	Template template = configuration.getTemplate("hello.ftl");
	// 创建一个穆数据集,可以是pojo也可以是map,推荐使用map
	Map<String, String> data = new HashMap<>();
	data.put("hello", "hello freemarker!");
	// 创建一个Writer对象,指定输出文件的路径以及文件名
	Writer out = new FileWriter(new File("E:/Temp/freemarker/hello.txt"));
	// 生成静态页面
	template.process(data, out);
	// 关闭流
	out.close();
}

执行之后,生成静态文件:


模板的常用语法

1.访问map中的key

        这个很简单,和EL表达式差不多,就比如上面的${hello }

2.访问pojo中的属性

        这个用法也是和EL表达式一样


模板:


运行效果:


3.取集合中的数据

用法:

    <#list stuList as student>

        学号:${student.id}

    </#list>

需要两个参数,分别对应着<c:foreach>标签中的items和var

模板:                                                                                   执行效果:

                                                        

4.取循环中的下标

方法:

<#list stuList as student>

    学号:${student.id},序号${student_index}

</#list>

效果:


5.判断

用法:

<#if stu_index % 2 == 0>

    yyyyyy

<#else>

    nnnnnn

</#if>

效果:


6.日期类型格式化


用法:


7.Null值的处理

对于Null值(不存在或为NULL),不进行处理在生成静态文件时就会报错。

两种处理方式:


8.include标签

方法:<#include “模板名称”>


需要注意的是,如果包含的模板中有需要数据的地方,也要将对应的数据放入数据集中。

9.格式化数值

        对于数值,比如long型的数据,默认的格式是xx,xxx,xxx如果想将逗号分隔符去掉,需要在后面加一个?c 例:

<!-- Freemaker -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
	<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
	<property name="defaultEncoding" value="UTF-8" />
</bean>

<strong class="price">${item.price?c }</strong>

这里只是介绍了几种常用的语法,具体的语法有很多,可以参看FreeMarker的官方文档。

FreeMarker整合Spring生成静态页面

第一步:引入依赖,整合spring需要的Jar和FreeMarker的Jar:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context-support</artifactId>
</dependency>
<!-- freemarker -->
<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
</dependency>

第二步:创建整合Spring的配置文件

<!-- Freemaker -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
	<property name="templateLoaderPath" value="/WEB-INF/ftl/" /><!-- 指定模板文件目录 -->
	<property name="defaultEncoding" value="UTF-8" />
</bean>

第三步:使用

@Controller
public class HtmlGenController {

	@Autowired
	private FreeMarkerConfigurer freeMarkerConfigurer;

	//这里省略了后缀.html,所以访问的时候应该是127.0.0.1:8086/genhtml.html
	@RequestMapping("/genhtml")	@ResponseBody
	public String genHtml() throws Exception {
		Configuration configuration = freeMarkerConfigurer.getConfiguration();
		// 加载模板对象
		Template template = configuration.getTemplate("student.ftl");
		// 创建一个数据集
		Map<String, Object> data = new HashMap<>();
		// 向数据集中添加需要的所有数据,此处省略.................................
		// 指定文件输出路径以及文件名
		Writer out = new FileWriter(new File("E:/Temp/freemarker/student.html"));
		// 输出文件
		template.process(data, out);
		// 关闭流
		out.close();
		return "OK";
	}}
然后启动服务,访问127.0.0.1:8086/genhtml.html,就会生成对应的静态文件student.html


访问:



  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值