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

本文介绍如何在项目中使用Freemarker实现页面缓存,包括环境配置、模板文件夹创建、HTML文件存放位置、Service方法编写及Spring的集成。重点关注在Service层的实现,利用ServletContext获取模板路径,并确保FreeMarker模板标签正确转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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文件了没有。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值