FreeMarker 页面静态化—快速入门(三)

超、凢脫俗 2022-12-31 10:30 191阅读 0赞

FreeMarker的主要学习内容

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xPVkVfTWVfXw_size_16_color_FFFFFF_t_70

FreeMarker中文官方手册(可结合学习)http://freemarker.foofun.cn/

FreeMarker学习笔记源码git地址(可供下载):https://github.com/L-Melted/FreeMarkerDemo.git

四、FreeMarker 页面静态化

通过上述介绍可知Freemarker是一种基于模板的、用来生成输出文本的通用工具,所以我们必须要定制符合自己业务的模板,然后生成自己的Html页面。Freemarker是通过freemarker.template.Configuration这个对象对模板进行加载的(它也处理创建和缓存预解析模板的工作),然后我们通过getTemplate方法获得你想要的模板,有一点要记住freemarker.template.Configuration在你整个应用必须保证唯一实例。

创建Servlet,方便向对应页面进行跳转

  1. package com.xxx.servlet;
  2. import freemarker.template.Configuration;
  3. import freemarker.template.Template;
  4. import freemarker.template.TemplateException;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.File;
  11. import java.io.FileWriter;
  12. import java.io.IOException;
  13. import java.util.HashMap;
  14. import java.util.Map;
  15. /**
  16. * @author: liman
  17. * @Date: 2020/12/29 15:47
  18. * @Description: FreeMarker 常见指令 :macro指令
  19. */
  20. @WebServlet("/newsServlet")
  21. public class NewsServlet extends HttpServlet {
  22. @Override
  23. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  24. // 实例化模板对象
  25. Configuration configuration = new Configuration();
  26. // 设置加载模板的上下文 以及加载模板的路径 (模板存放路径)
  27. configuration.setServletContextForTemplateLoading(getServletContext(),"/template");
  28. // 设置模板的编码格式
  29. configuration.setDefaultEncoding("UTF-8");
  30. // 加载模板文件 获取模板对象
  31. Template template = configuration.getTemplate("news.ftl");
  32. // 设置数据模型
  33. Map<String, Object> map = new HashMap<>();
  34. map.put("title","蒙古国捐赠3万只羊分发完成,附分发明细图");
  35. map.put("source","澎湃新闻");
  36. map.put("pubTime","2020-12-29 14:43");
  37. map.put("content","湖北日报12月29日消息,12月28日,湖北省慈善总会按照有关要求和程序,对蒙古国捐赠羊的分发情况进行公示。社会各界持续关注的捐赠羊,已全部分享给省内新冠肺炎医疗救治定点医院一线医务工作者、全国各地援鄂医疗队以及在我省新冠肺炎疫情防控中因公殉职人员的家属。");
  38. // 获取项目的根目录
  39. String basePath = req.getServletContext().getRealPath("/");
  40. // 设置html的存放路径
  41. File htmlFile = new File(basePath + "/html");
  42. // 判断文件(目录)是否存在
  43. if(!htmlFile.exists()){
  44. // 如果文件目录不存在,则新建文件目录
  45. htmlFile.mkdirs();
  46. }
  47. // 得到生成的文件名 (生成随机不重复的文件名)
  48. String fileName = System.currentTimeMillis() + ".html";
  49. // 创建html文件
  50. File file = new File(htmlFile, fileName);
  51. // 获取文件输出流
  52. FileWriter writer = new FileWriter(file);
  53. // 生成html(将数据模型填充到模板中)
  54. try {
  55. template.process(map,writer);
  56. } catch (TemplateException e) {
  57. e.printStackTrace();
  58. } finally {
  59. // 关闭资源
  60. writer.flush();
  61. writer.close();
  62. }
  63. }
  64. }

在webapp的template文件下面创建news.ftl文件获取数据

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <#-- freemarker模板中设置编码格式,否则中文可能乱码 -->
  5. <meta http-equiv="content-type" content="text/html;charset=UTF-8">
  6. </head>
  7. <body>
  8. <#-- 新闻标题 -->
  9. <h2 align="center">${title}</h2>
  10. <#-- 新闻来源 和 发布时间 -->
  11. <p align="center">
  12. 新闻来源:${source}
  13. 发布时间:${pubTime}
  14. </p>
  15. <#-- 新闻内容 -->
  16. <p style="text-indent: 2em">
  17. ${content}
  18. </p>
  19. </body>
  20. </html>

启动项目:访问,就会自动生成html模板

发表评论

表情:
评论列表 (有 0 条评论,191人围观)

还没有评论,来说两句吧...

相关阅读

    相关 网页静态--Freemarker

    1.1 分析 每个商品要对应生成一个html文件,保存到磁盘,访问文件就不一定使用tomcat,可以使用nginx访问。 可以使用freemaker工具生成。  

    相关 Freemark快速入门

     因为我负责的模块中要使用到freemark,所以我就来学习freemark了,但是在网上找了很多学习资料,蹲了很多的坑,所以决定自己写一篇关于freemark入门的帖子,就当

    相关 FreeMarker-网页静态

      网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道。 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体