Freemarker笔记

来源:互联网 发布:海纳百川软件下载 编辑:程序博客网 时间:2024/05/22 14:34

1. 关键代码

package com.testxx.weixin.base.view;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.Writer;import java.util.Locale;import java.util.Map;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.beans.BeansException;import org.springframework.util.StringUtils;import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils;import org.springframework.web.servlet.support.RequestContextUtils;import org.springframework.web.servlet.view.freemarker.FreeMarkerView;import com.fasterxml.jackson.databind.ObjectMapper;import com.testxx.weixin.base.cons.ConsProper;import com.testxx.weixin.base.cons.Consts;import freemarker.template.SimpleHash;import freemarker.template.Template;import freemarker.template.TemplateException;/** * 处理静态化页面 * @author XIONGXING *  */public class CustomerFreeMarkerView extends FreeMarkerView {protected ConsProper consProper;@Overrideprotected void initServletContext(ServletContext servletContext) throws BeansException {super.initServletContext(servletContext);WebApplicationContext  webcontext = WebApplicationContextUtils.getWebApplicationContext(servletContext);consProper = (ConsProper)webcontext.getBean(ConsProper.class);}@Overrideprotected void doRender(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)throws Exception {// Expose model to JSP tags (as request attributes).exposeModelAsRequestAttributes(model, request);// Expose all standard FreeMarker hash models.SimpleHash fmModel = buildTemplateModel(model, request, response);if (logger.isDebugEnabled()) {logger.debug("Rendering FreeMarker template [" + getUrl() + "] in FreeMarkerView '" + getBeanName() + "'");}// Grab the locale-specific version of the template.Locale locale = RequestContextUtils.getLocale(request);/* * 1:创建HTML 0,其他 都不会创建 *  * CREATE_HTML_PATH:文件完整路径 */Integer createHtmlFlag = (Integer) model.get(Consts.CREATE_HTML);String createFilePath = (String) model.get(Consts.CREATE_HTML_PATH);if (null != createHtmlFlag && 1 == createHtmlFlag.intValue()) {if(StringUtils.isEmpty(createFilePath)){String uri = request.getRequestURI();createFilePath =consProper.getCreateHTMLRootPath()+uri.substring(0,uri.lastIndexOf("."))+".html";logger.info("createFilePath:"+createFilePath);}createHTML(getTemplate(locale), fmModel, request, response, createFilePath);}processTemplate(getTemplate(locale), fmModel, response);}/** * 生成自定义的视图 *  * @param response * @param obj * @throws IOException */@SuppressWarnings("unused")private void print(HttpServletResponse response, Object obj)throws IOException {PrintWriter writer = response.getWriter();writer.print(new ObjectMapper().writeValueAsString(obj));writer.flush();writer.close();}/** * 创建HTML时校验 *  * @param template * @param model * @param request * @param response * @throws IOException * @throws TemplateException * @throws ServletException */private void createHTML(Template template, SimpleHash model,HttpServletRequest request, HttpServletResponse response,String htmlPath) throws IOException, TemplateException,ServletException {File htmlFile = new File(htmlPath);if (!htmlFile.getParentFile().exists()) {htmlFile.getParentFile().mkdirs();}if (htmlFile.exists() && htmlFile.delete()) { // 文件存在并删除成功createHTMLFile(template, model, htmlFile);}if (!htmlFile.exists()) { // 文件不存在则进行创建createHTMLFile(template, model, htmlFile);}}/** * 创建文件 *  * @param template * @param model * @param htmlFile * @throws IOException * @throws TemplateException */private void createHTMLFile(Template template, SimpleHash model,File htmlFile) throws IOException, TemplateException {Writer out = null;try {htmlFile.createNewFile();out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), Consts.UTF_8));// 处理模版template.process(model, out);} finally {if (out != null) {out.flush();out.close();}}}}

springmvc.xml相关freemarker的配置

        <!-- config begin--><context:property-placeholder location="classpath:/config/properties/application-freemarker.properties" ignore-unresolvable="true" /><!-- config end--><bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><property name="exposeRequestAttributes" value="true" /><property name="exposeSessionAttributes" value="true" /><property name="viewClass" value=" com.testxx.weixin.base.view.CustomerFreeMarkerView" /><property name="cache"><value>true</value></property><property name="suffix"><value>.ftl</value></property><property name="contentType"><value>text/html; charset=UTF-8</value></property></bean><!-- 这里配置的是freemarker --><bean id="freemarkerConfig"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><property name="templateLoaderPath" value="/WEB-INF/views/" /><property name="freemarkerSettings"><props><prop key="template_update_delay">0</prop><prop key="default_encoding">UTF-8</prop><prop key="number_format">0.##########</prop><prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop><prop key="classic_compatible">true</prop><prop key="template_exception_handler">ignore</prop></props></property><!-- Freemarker 变量  --><property name="freemarkerVariables" ><map><entry key="webRoot" value="${webRoot}"></entry><entry key="nginxRoot" value="${nginxRoot}"></entry></map></property></bean><!-- 设置freeMarker的配置文件路径 --><bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean"></bean>

controller如果如下部分,则会生成HTML代码,否则按正常流程走过

mv.addObject(Consts.CREATE_HTML,1); 

2.总结说明

目前觉得挺好用的一款框架, 查阅过一些资料,尤其与jsp对比, freemarker略胜一筹。


0 0
原创粉丝点击