原理:FreeMarker是一个基 于Java的开发包和类库的一种将模板和数据进行整合并输出文本的通用工具,FreeMarker实现页面静态化的原理是:将页面中所需要的样式写入到 FreeMarker模板文件中,然后将页面所需要的数据进行动态绑定并放入到Map中,然后通过FreeMarker的模板解析类process()方 法完成静态页面的生成。
代码:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.context.ServletContextAware;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
@Controller("test")
public class test implements ServletContextAware {
/** servletContext */
private ServletContext servletContext;
@Resource(name = "freeMarkerConfigurer")
private FreeMarkerConfigurer freeMarkerConfigurer;
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
@RequestMapping(value = "test", method = RequestMethod.GET)
public void test() {
try {
FileOutputStream fileOutputStream = null;
OutputStreamWriter outputStreamWriter = null;
Writer writer = null;
//获取模板
freemarker.template.Template template = freeMarkerConfigurer.getConfiguration().getTemplate("/shop/test.ftl");
//创建存放生成的静态页文件
File staticFile = new File(servletContext.getRealPath("test2.html"));
fileOutputStream = new FileOutputStream(staticFile);
outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8");
writer = new BufferedWriter(outputStreamWriter);
//获取model 要展现的动态数据
Map<String, String> model = new HashMap<String, String>();
model.put("test", "这是静态化数据123");
//模板和数据生成前端可以直接访问的html静态页
template.process(model, writer);
writer.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}