如何在项目里面使用freemarker实现页面缓存

Posted Ashan-Da宝旗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在项目里面使用freemarker实现页面缓存相关的知识,希望对你有一定的参考价值。

1.环境配置:在这里我就不说了,上面两篇有如何配置freemarker

2.在项目里面你运用freemarker需要在项目里面创建一个模板文件夹,在web-inf下面创建一个ftl文件夹

3.由于通过freemarker将模板页面转化为html页面,前台访问直接跳页面就行了,所以不能把生成的html文件放入web-inf文件夹下面,在webapp下创建一个文件夹命名html

4.写service方法

4.1由于该方法需要交给spring统一管理,所以需要注入到spring里面

4.2创建一个接口StaticPageService

import java.util.Map;

public interface StaticPageService 
	
	public void productIndex(Map<String, Object> root,Integer id);



4.3创建接口的实现类

public class StaticPageServiceImpl implements StaticPageService,ServletContextAware
	
	private Configuration configuration;

	public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) 
		this.configuration = freeMarkerConfigurer.getConfiguration();
	
	//静态化方法
	public void productIndex(Map<String, Object> root,Integer id)
		//输出流 从内存中写入磁盘
		Writer out=null;
		//创建模板
		try 
			//读入utf-8的数据到内存里面
			Template template = configuration.getTemplate("productDetail.html");
			String path=getPath("/html/product/"+id+".html");
			File file=new File(path);
			File parentFile = file.getParentFile();
			if (!parentFile.exists()) 
				parentFile.mkdirs();
			
			out=new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
			//模板对象处理
			template.process(root, out);
		 catch (Exception e) 
			e.printStackTrace();
		finally 
			//释放io流
			if (out!=null) 
				try 
					out.close();
				 catch (IOException e) 
					e.printStackTrace();
				
				
			
		
		
		
	
	//获取上下文路径
	public String getPath(String name)
		
		return servletContext.getRealPath(name);
	
	private ServletContext servletContext;

	
	public void setServletContext(ServletContext servletContext) 
		this.servletContext=servletContext;
		
	



注意:由于要获取模板文件夹的路径

需要实现ServletContextAware接口重写里面的setServletContext方法,本service是使用set方式手动注入的。

root为要填充页面的数据。

4.4在spring配置文件里面注入

<!-- 配置freemarker -->
     <bean id="staticPageService" class="cn.itcast.core.service.staticpage.StaticPageServiceImpl">
     		<property name="freeMarkerConfigurer">
     			<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
     				<!-- 设置模板路径 -->
     				<property name="templateLoaderPath" value="/WEB-INF/ftl/"></property>
     				<!-- 设置控制模板为utf-8 -->
     				<property name="defaultEncoding" value="UTF-8"></property>
     			</bean>
     		</property>
     </bean>

注意:这两个参数必须传


4.5 就是模板了,要将所有的标签根据freemarker的语法转化正确,由于free marker支持el表达式就不用转化

例如:

<#list skus as sku>
	if("$sku.colorId"==colorId && size=='$sku.size')
		//赋值
		$("#price").html("¥"+'$sku.skuPrice');
		$("#mprice").html("¥"+'$sku.marketPrice');
		$("#free").html('$sku.deliveFee');
		$("#stock").html('$sku.stockInventory');
		skuId='$sku.id';
		buyLimit='$sku.skuUpperLimit';

</#list>


启动程序看相应文件夹生成相应的html文件了没有。





以上是关于如何在项目里面使用freemarker实现页面缓存的主要内容,如果未能解决你的问题,请参考以下文章

页面缓存-freemarker静态处理

freemarker里面用assign标签定义数组可以动态赋值吗

如何使用 Freemarker 和 Apache FOP 将项目列表呈现为 4 个块?

网页静态化—redis | freemarker

freemarker在web应用项目的使用

FreeMarker页面静态化入门