-
导入pom坐标
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xst</groupId> <artifactId>freemarker</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>freemarker Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.2.1.v20140609</version> </plugin> </plugins> </build> </project>
- 配置web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>freemarker</servlet-name> <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class> <init-param> <param-name>TemplatePath</param-name> <param-value>/</param-value> </init-param> <init-param> <param-name>default_encoding</param-name> <param-value>utf-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>freemarker</servlet-name> <url-pattern>*.ftl</url-pattern> </servlet-mapping> </web-app>
- freemarker简单的使用
Freemarker基础数据类型
package com.sxt.controller; import com.sxt.controller.vo.User; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; /** * @Author panghl * @Date 2021/1/16 9:40 * @Description TODO **/ @WebServlet(urlPatterns = "/f01") public class F01 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /** * 准备Model数据 * 转发页面(指定模板文件) */ req.setAttribute("msg","hello freemarker"); req.setAttribute("flag",true); req.setAttribute("createTime",new Date()); req.setAttribute("age",20); req.setAttribute("salary",6666); req.setAttribute("test",0.57); req.setAttribute("msg02","freemarker is so essay"); String[] strs = new String[] {"admin","super-admin","test"}; req.setAttribute("strs",strs); Integer[] ids = new Integer[] {1,23,4,5}; req.setAttribute("ids",ids); List<User> users = Arrays.asList(new User(10,"heloUser","浙江杭州",40),new User(20,"李彦宏","北京百度",35)); req.setAttribute("users",users); Map<String,String> map = new HashMap<>(); map.put("admin","码云"); map.put("test","李彦宏"); req.setAttribute("map",map); req.setAttribute("userName",null); // ftl 文件浏览器不能直接访问 req.getRequestDispatcher("/templates/f01.ftl").forward(req,resp); } }
f01.ftl
<#-- html标签 js css --> <h1>Freemarker基础数据类型</h1> 你好啊! <h2>${msg}</h2> <#-- boolean 类型不能直接输出, 如果输出,需要转换为字符串--> <#--${flag} 源码不可见--> ?string: ${flag?string} || ?c:${flag?c} <br/> <#if flag> flag 为true <#else> flag 为false </#if> <br/> <#-- 日期类型 不能直接输出,需要转换为字符串输出 --> <#--${createTime}--> date: ${createTime?date} || string :${createTime?string("yyyy-MM-dd")} || datetime: ${createTime?datetime} || time: ${createTime?time} <br/> <#-- 数值输出 --> ${age} || ${salary} ||非格式化输出: ${salary?c}|| 货币: ${test?string.currency} || 百分比: ${test?string.percent} <br/> <#-- 字符串输出 --> ${msg02} || 大写: ${msg02?upper_case} || 首字母大写: ${msg02?cap_first} || 每个单词首字母大写: ${msg02?capitalize} <br/> 字符串切割: <br/> start..end : 索引2-3: ${msg02[2..3]} || ${msg02[2..<4]} <br/> start..小于end+1 和start ..end相同: ${msg02[2..<4]} <br/> 限制长度的值域 (start..*length): ${msg02[2..*4]} <br/> 无右边界值域 (start..) : ${msg02[2..]} <br/> <br/> <#-- 序列类型: 数组 list set --> <#list strs as str> <li>${str}</li> </#list> <hr/> <#list ids as id> <li>${id}</li> </#list> <hr/> <#list users as user> <li>${user.id} || ${user.userName} || ${user.addr} </li> </#list> <hr/> 排序 <#list ids?sort as id> <li>${id_index} - ${id}</li> </#list> <#list users?sort_by("age") as user> <li>${user.id} || ${user.userName} || ${user.addr} || ${user.age}</li> </#list> <hr/> hash <#list map?keys as key> ${key} || ${map[key]}<br/> </#list> <#-- 值为null 时的处理: 1.使用默认值 !"默认值" 2.判断变量值是否存在 输出内容 --> <br/>值为null 时的处理: || 使用默认值: ${userName!"admin"} <br/> 判断变量值是否存在: <#if userName??> ${userName} <#else> userName不存在 </#if>
FreeMarker常见指令
package com.sxt.controller; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @Author panghl * @Date 2021/1/16 10:56 * @Description TODO **/ @WebServlet(urlPatterns = "/f02") public class F02 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String action = req.getParameter("action"); // if (action.equals("")){ // // }else if (){ // // }else if (){ // // }else{} req.getRequestDispatcher("/templates/f02.ftl").forward(req,resp); } }
f02.ftl
<h1>FreeMarker常见指令</h1> <#-- 常用指令 -assign 变量的定义 --> <#assign str="freemarker"> <H2>${str}</H2> <hr/> <#assign ids = [10, 20, 30]> ${ids?join(" - ")} <br/> <#assign x=0> ${x+1} <br/> <#assign userName = "admin",userPwd = "123456", str=["test","user"]> ${userName} || ${userPwd} || ${str?join(",")} <br/> <#-- 常用指令02-if elseif else --> <#assign action="main"> <#if action =="index"> 首页。。。 <#elseif action=="main"> 主页。。。 <#else> 404。。。 </#if> <br/> <#-- 常用指令03-list --> <#assign users=["admin"]> <#list users as user> ${user} <#else> 暂无用户 </#list> <br/> <#if users?? && users?size gt 0 > <#list users as user> ${user} </#list> <#else> 暂无数据 </#if> <br/> <#list users> <ul> <#items as user> <li>${user}</li> </#items> </ul> </#list> <br/> <#-- 常用指令04-macro --> <#-- 1.定义宏test01 --> <#macro test01> hello macro </#macro> <#-- 2.使用宏test01 --> <@test01></@test01> <br/> <@test01></@test01> <br/> <@test01></@test01> <br/> <@test01></@test01> <br/> <hr/> <#macro test02 userName> hello ${userName} </#macro> <@test02 userName="admin"></@test02> <hr/> <#macro test03 userName users> hello ${userName} <br/> <#list users as user> ${user} <#else> 暂无数据 </#list> </#macro> <@test03 "auper-panghl" users></@test03> <br> <#-- 常用指令05-import --> <#import "f03.ftl" as f03> <@f03.test04 userName="admin"></@f03.test04> <hr> <@f03.cfb n=9></@f03.cfb> <#-- 常用指令05-include --> <hr> <#include "index.html"> <#include "f04.ftl"> <hr> <#function avg x y> <#return (x + y)/2> </#function> ${avg(10,20)}
f03.ftl
<#macro test04 userName> 我是f03.ftl hello ${userName} </#macro> <#-- 9*9乘法表 --> <#macro cfb n> <#list 1..n as i> <#list 1..i as j> <#if i*j lt 10> ${j}*${i}= ${i*j} <#else> ${j}*${i}=${i*j} </#if> </#list> <br/> </#list> </#macro>
f04.ftltesttest testtest testtest test test vtest
- 将网页静态化案例
package com.sxt.controller; import freemarker.cache.FileTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * @Author panghl * @Date 2021/1/16 12:27 * @Description TODO **/ @WebServlet(urlPatterns = "/f03") public class F03 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.创建FreeMarker的配置类 Configuration cfg = new Configuration(); cfg.setDefaultEncoding("utf-8"); cfg.setServletContextForTemplateLoading(getServletContext(),"/"); //2.指定模块加载器:将模板存入缓存中 // cfg.setTemplateLoader(new FileTemplateLoader(new File("templates"))); //3. 根据模板文件获取模板对象 Template template = cfg.getTemplate("templates/news.ftl"); //4.构造数据模型 Map<String,Object> map = new HashMap<>(); map.put("title","开业五年 习近平推动这家银行点石成金"); map.put("source","新闻社"); map.put("createTime",new Date()); map.put("content","对一切为亚洲和平与发展贡献正能量的意愿和行动,我们都持积极态度”“倡议成立亚投行,就是中国承担更多国际责任、推动完善现有国际经济体系、提供国际公共产品的建设性举动,有利于促进各方实现互利共赢”“亚投行应该成为促进成员共同发展、推动构建人类命运共同体的新平台”……"); String basePath = req.getSession().getServletContext().getRealPath("/"); File html = new File(basePath+"/html"); if (!(html.exists())){ //创建目录 用于存放.html文件 html.mkdir(); } String fileName = System.currentTimeMillis()+".html"; //5.文件输出 try { template.process(map,new FileWriter(new File(html,fileName))); } catch (TemplateException e) { e.printStackTrace(); } } }
news.ftl
<h1>${title}</h1> <br/> 发布时间:${createTime?string("yyyy-MM-dd HH:mm:ss")} 来源:${source} <br/> ${content}
springboot项目中application.properties配置
扫描二维码关注公众号,回复:
12432847 查看本文章

#freemarker config spring.freemarker.cache=false spring.freemarker.check-template-location=true spring.freemarker.content-type=text/html spring.freemarker.suffix=.html spring.freemarker.template-loader-path=classpath:/templates/