Freemarker笔记
2016-05-23 10:45
127 查看
1. 关键代码
springmvc.xml相关freemarker的配置
controller如果如下部分,则会生成HTML代码,否则按正常流程走过
mv.addObject(Consts.CREATE_HTML,1);
2.总结说明
目前觉得挺好用的一款框架, 查阅过一些资料,尤其与jsp对比, freemarker略胜一筹。
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; @Override protected void initServletContext(ServletContext servletContext) throws BeansException { super.initServletContext(servletContext); WebApplicationContext webcontext = WebApplicationContextUtils.getWebApplicationContext(servletContext); consProper = (ConsProper)webcontext.getBean(ConsProper.class); } @Override protected 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略胜一筹。
相关文章推荐
- 线段树 hdu5700 区间交
- C++第六次实验
- js深拷贝和浅拷贝
- int (*a)(int) ; int (*a[10])(int); int *(*a)(int) ;
- swift中的协议
- My97DatePicker控件调用
- C#:操作xml文件
- 状态栏下拉通知右边时间变化问题,由时间变为日期
- Servlet编程:(1)如何使用Servlet
- PYTHON功能学习之邮件发送
- ESXI系统引导盘
- kvm基本操作命令详解
- cocoPod 基础知识集成
- pickerView默认选中,本地化存储
- C语言中常用计时方法总结
- 关于bootstrap的表单元素
- IntelliJ IDEA 优化总结 适用于clion
- 第十三周实践项目课后————交通工具类(2)
- Android UI开发第三篇——popupwindow
- 余弦相似度