FreeMarker生成静态HTML页面的工具类FreeMarkerUtil
一.FreeMarkerUtil工具类:
import com.huaxia.entity.News; import com.huaxia.entity.User; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.util.HashMap; import java.util.Locale; import java.util.Map; /** * 创建人: leon * 创建时间: 2014年11月28日 上午10:07:51 * 类描述:Freemarker的工具类 */ public class FreemarkerUtil { /** * 通过指定的名字获取相应的模板 * @param fileName * @return */ public Template getTemplate(HttpServletRequest request,String fileName) { try { Configuration cfg = new Configuration(); cfg.setOutputEncoding("UTF-8"); cfg.setDefaultEncoding("UTF-8");// 编码设置1 cfg.setEncoding(Locale.CHINA, "UTF-8"); //设定读取ftl模板文件的目录 //cfg.setClassForTemplateLoading(this.getClass(), "/template"); //读取src目录下 cfg.setServletContextForTemplateLoading(request.getSession().getServletContext(), "/template"); //读取webroot目录下 //在模板文件目录中找到名称为name的文件,并加载为模板 Template template = cfg.getTemplate(fileName); template.setEncoding("UTF-8");// 编码设置2 return template; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 通过指定的文件目录和文件名生成相应的文件 * @param fileDir * @param fileName */ public Boolean printToFile(Template template,String fileDir,String fileName,Map<String,Object> root) { boolean done = false; Writer writer = null; try { //判断多级目录是否存在,不存在则一级级创建 String[] paths = fileDir.split("\\\\");//注意:此处“\\”是错误的,必须要“\\\\”才能分割字符串 String dir = paths[0]; for (int i = 1; i < paths.length; i++) { dir = dir + File.separator + paths[i]; File file=new File(dir.toString()); if (!file.exists()) { file.mkdir(); } } //创建输出流 File file = new File(fileDir +File.separator+ fileName); //设置生成的文件编码为UTF-8 //服务器不支持UTF-8格式HTML时候使用ANSI格式HTML文件,即系统默认编码 writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8")); // 编码设置3 //writer = new FileWriter(fileDir +File.separator+ fileName); //输出模板和数据模型都对应的文件 template.process(root, writer); done = true; } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } finally { try { if(writer!=null){ writer.close(); } } catch (IOException e) { e.printStackTrace(); } } return done; } /** * 通过传入的请求和新闻信息重新生成html文件 * @param news //新闻实体类 * @param request //请求 * @param user //用户 * @return */ public boolean genenateHtml(News news,HttpServletRequest request,User user) { String fileName = news.getFileName(); Map<String, Object> root = new HashMap<String, Object>(); root.put("id", news.getId()); root.put("title", news.getTitle()); root.put("create_date", news.getCreateDate()); root.put("creator", news.getCreator()); root.put("content", ClobUtil.ClobToString(news.getContent())); root.put("fileName", news.getUploadFile()==null?"":news.getUploadFile()); FreemarkerUtil freemarkerUtil = new FreemarkerUtil(); Template template = null; template = freemarkerUtil.getTemplate(request, "news.ftl");//新闻发布系统的freemarker模板 String htmlDir = news.getDir(); boolean done = printToFile(template, htmlDir, fileName, root); return done; } }
二.发布新闻信息的Servlet:
if ("publishNews".equals(action)) { //发布新闻:通过传入的新闻id获取新闻信息生成新闻模板 String idsStr = request.getParameter("newsIds"); INewsDao newsDao = new NewsDaoImpl(); boolean done = newsDao.publishNews(idsStr,request,user); String str =null; if(done){ str="{success:true}"; }else{ str="{success:false}"; } response.setContentType("text/html;charset=UTF-8"); out=response.getWriter(); out.print(str); out.close(); return; }
三.发布新闻信息的Dao方法:
/** * 发布新闻信息的Dao方法 * @param idsStr //新闻ID * @param request * @param user */ public boolean publishNews(String idsStr, HttpServletRequest request, User user) { Session s = null; boolean done = false; FreemarkerUtil freemarkerUtil = new FreemarkerUtil(); List<Integer> ids = new ArrayList<Integer>(); String[] newIds = idsStr.split(","); for (int i = 0; i < newIds.length; i++) { ids.add(Integer.valueOf(newIds[i])); } try { s = HibernateUtil.getSession(); s.beginTransaction(); StringBuffer sb = new StringBuffer("select * from news where id in("); for (int i = 0; i < ids.size(); i++) { sb.append(ids.get(i)); if (i != ids.size() -1) { sb.append(","); } } sb.append(")"); SQLQuery query = s.createSQLQuery(sb.toString()); List<News> list = query.addEntity(News.class).list(); for (int i = 0; i < list.size(); i++) { News news = list.get(i); done = freemarkerUtil.genenateHtml(news, request, user); if (!done) { return done; } } s.getTransaction().commit(); done = true; } catch (Throwable e) { logger.error(e.toString()); HibernateUtil.endSession(s); } finally { HibernateUtil.endSession(s); } return done; }
相关链接:
Freemarker模板应用
Freemarker生成html页面
Freemarker 设置编码
相关推荐
本篇文章将详细讲解如何利用FreeMarker来生成静态页面。 首先,我们需要理解FreeMarker的基本工作原理。在FreeMarker模板文件中,我们可以编写HTML结构,同时嵌入特定的FreeMarker语法,如`<#if>`、`<#foreach>`等...
在本项目"springboot整合freemarker生成静态html的demo.zip"中,我们将探讨如何将SpringBoot框架与FreeMarker模板引擎结合,以实现动态数据驱动的静态HTML页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...
在本项目中,“struts2+freemarker 生成静态页面”意味着利用这两个工具将动态网页转化为静态HTML页面,以提高网站性能和用户体验。 1. **Struts2框架**:Struts2提供了全面的MVC架构支持,包括动作(Action)类、...
本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....
标题“使用FreeMarker生成Html静态文件”暗示了我们将探讨如何利用FreeMarker将动态数据转化为静态的HTML页面。这一过程通常涉及以下几个步骤: 1. **配置FreeMarker**: 首先,我们需要在Java项目中引入FreeMarker...
- 结合持续集成/部署(CI/CD)流程,自动批量生成大量静态页面。 通过上述步骤和示例,你可以了解并实现使用Freemarker生成静态HTML的基本过程。在实际开发中,这个功能可以用于构建静态站点、邮件模板或者API文档等...
在生成静态页面的场景中,Struts2可以作为数据和模板之间的桥梁,将处理后的业务数据传递给Freemarker,由Freemarker生成静态HTML。 **生成静态页面的流程** 1. **配置Struts2**: 首先,我们需要在Struts2的配置...
4. **生成静态文件**:使用Freemarker的`Template`类加载模板文件,然后结合数据模型生成最终的HTML。代码如下: ```java Template template = configuration.getTemplate("index.ftl"); Writer out = new ...
Freemarker是一个强大的模板引擎,常用于Web应用中动态生成HTML或其他类型的静态页面。它采用声明式编程方式,使得开发者可以专注于数据模型,而不用关心如何呈现这些数据。本篇文章将深入探讨Freemarker的工作原理...
8. **静态页面生成**:整合Struts2和Freemarker的一个常见应用是生成静态页面,提高网站性能。这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和...
5. **保存HTML**:将生成的HTML文件保存到服务器的指定目录,作为静态页面。 6. **分页处理**:对于多页内容,重复以上步骤,生成每个分页对应的静态HTML。 7. **配置URL**:设置URL重写规则,使用户访问动态URL时...
在Java Web开发中,FreeMarkerUtil工具类通常被用来简化FreeMarker模板的使用,帮助开发者更便捷地生成静态页面。 **FreeMarker的基本概念** 1. **模板(Template)**: 模板是FreeMarker的核心,它是HTML、XML或...
在Web开发中,生成HTML静态页面源码是一个常见的需求。静态页面可以提供更快的加载速度和更好的SEO优化。使用FreeMarker实现这个目标,主要有以下几个步骤: 1. **理解FreeMarker模板语言**:FreeMarker的核心是...
在本篇文章中,我们将探讨几种主流的静态页面生成方案和工具,并详细介绍FreeMarker模板引擎在其中的应用。 一、静态页面生成的优势 1. 提升性能:静态页面直接由服务器发送,无需执行服务器端脚本,减少了服务器...
总结来说,Java集成Freemarker生成静态HTML的过程包括:引入Freemarker依赖、配置模板相关设置、编写模板文件、在Controller中处理请求并返回模板名、以及使用工具类将模板渲染为HTML并保存到磁盘。这个过程在Web...
Java CMS(内容管理系统)生成静态页面是一种常见的优化网站性能和提升用户体验的方法。在这个过程中,原本由动态脚本生成的网页内容被转化为HTML文件,这些HTML文件可以被浏览器直接读取,减少了服务器处理请求的...
`Freemarker`是一个强大的模板引擎,通常用于动态生成HTML、XML等文本格式,而将`Freemarker`与HTML模板结合生成PDF,可以充分利用HTML的易编辑性和富文本特性,为用户提供高质量的文档输出。下面我们将深入探讨如何...
- `freemarker`目录下的例子可能包括基础的模板文件(如`template.ftl`)和对应的Java测试类,展示了如何使用FreeMarker生成HTML,你可以通过阅读这些例子了解具体用法。 总的来说,FreeMarker是Java Web开发中...