两种freemarker模板路径设置方法
freemarker的用法
freemarker的用法Freemarker是一种用于生成文本输出(例如HTML网页)的模板引擎。
它通常用于在Web应用程序中生成动态内容,比如将数据填充到HTML模板中。
以下是关于Freemarker的用法的一些方面:1. 模板语法,Freemarker使用类似于HTML的标签和指令来标记要填充数据的位置。
例如,使用`${variable}`语法来插入变量的值,使用`<#if>`和`<#else>`来进行条件判断,使用`<#list>`来遍历列表等等。
2. 数据模型,在使用Freemarker时,需要将数据以某种形式传递给模板引擎。
通常,这些数据以Map的形式传递,也可以是JavaBean或POJO对象。
3. 集成,Freemarker可以与多种Java框架(如Spring、Struts等)集成,以便在Web应用程序中使用。
通常,需要配置模板解析器和视图解析器来使得框架能够识别和处理Freemarker模板。
4. 自定义指令和函数,Freemarker允许用户定义自己的指令和函数,以便扩展模板的功能。
这些自定义指令和函数可以在模板中被调用,从而实现特定的逻辑或功能。
5. 资源加载,Freemarker可以从不同的位置加载模板文件,比如从文件系统、类路径、URL等。
这使得模板可以被灵活地组织和管理。
总的来说,Freemarker是一个功能强大且灵活的模板引擎,它提供了丰富的模板语法和功能,可以帮助开发人员在Web应用程序中实现灵活的动态内容生成。
希望这些信息能够帮助你更好地了解Freemarker的用法。
freemarker 模板路径
freemarker 模板路径freemarker模板路径是指在freemarker引擎中指定模板文件所在的路径。
在使用freemarker模板进行页面渲染时,需要告诉freemarker 引擎要使用哪个模板文件来渲染页面。
因此,指定正确的模板路径非常重要,否则会导致 freemarker 引擎找不到模板文件而抛出异常。
在 freemarker 中,可以使用相对路径或绝对路径来指定模板路径。
如果使用相对路径,则相对于 freemarker 引擎当前工作目录的路径。
如果使用绝对路径,则需要指定完整的文件路径。
例如,如果我们有一个名为 'index.ftl' 的模板文件,它位于项目的根目录下的 'templates' 文件夹中,那么可以使用以下两种方式来指定模板路径:1. 使用相对路径```javaConfiguration cfg = newConfiguration(Configuration.VERSION_2_3_31);cfg.setDirectoryForTemplateLoading(newFile('templates'));Template template = cfg.getTemplate('index.ftl');```2. 使用绝对路径```javaConfiguration cfg = newConfiguration(Configuration.VERSION_2_3_31);cfg.setDirectoryForTemplateLoading(newFile('/absolute/path/to/templates'));Template template = cfg.getTemplate('index.ftl');```需要注意的是,如果使用相对路径,则需要确保 freemarker 引擎当前工作目录正确。
freemarker模板引擎的使用
freemarker模板引擎的使⽤ freemarker是⼀套前端模板引擎,在使⽤时,要先在web项⽬中添加freemarker.jar的依赖。
我在这⾥主要演⽰spring-mvc整合freemarker模板引擎。
项⽬案例的⽂件包结构⽰意图如下: ⾸先,在⼯程的web.xml⽂件中进⾏配置:<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!--配置前端控制器--><servlet><servlet-name>spring-mvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/springmvc-config.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>spring-mvc</servlet-name><url-pattern>*.html</url-pattern></servlet-mapping><!--配置编码格式为utf-8--><filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app> 然后配置springmvc-config.xml⽂件:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd /schema/context /schema/context/spring- <context:component-scan base-package="com.itszt.controller"></context:component-scan><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean><bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><property name="defaultEncoding" value="UTF-8"></property><property name="templateLoaderPath" value="/WEB-INF/templates/"></property></bean><!--spring-mvc整合freemarker--><bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property><property name="contentType" value="text/html;charset=UTF-8"></property><property name="suffix" value=".ftl"></property></bean></beans> ⽹站⾸页如下:<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>$Title$</title></head><body><a href="/testController/test1.html">test1</a><hr><a href="/testController/test2.html">test2</a><hr><a href="/testController/test3.html">test3</a><hr><a href="/testController/test4.html">test4</a><hr><a href="/testController/test5.html">test5</a><hr><a href="/testController/test6.html">test6</a><hr><hr><a href="/testController/test8.html">test8</a><hr><a href="/testController/test9.html">test9</a></body></html> 后台Java代码如下:package com.itszt.domain;import java.util.List;/*** 实体类*/public class User {private String username,usersex;private int userage;private String nation,hometown;private List<String> userhbs;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUsersex() {return usersex;}public void setUsersex(String usersex) {ersex = usersex;}public int getUserage() {return userage;}public void setUserage(int userage) {erage = userage;}public String getNation() {return nation;}public void setNation(String nation) {this.nation = nation;}public String getHometown() {return hometown;}public void setHometown(String hometown) {this.hometown = hometown;}public List<String> getUserhbs() {return userhbs;}public void setUserhbs(List<String> userhbs) {erhbs = userhbs;}}-----------------------------------------------package com.itszt.controller;import er;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import java.util.*;/*** 控制器*/@RequestMapping("testController")@Controllerpublic class TestController {@RequestMapping("test1")public String test1(HttpServletRequest request, HttpSession session){ request.setAttribute("data1","dd");request.setAttribute("data2","ff");session.setAttribute("data3","vv");return "hello";}@RequestMapping("test2")public String test2(Model model){User user=new User();user.setUsername("张三");user.setUsersex("男");user.setUserage(18);user.setNation("汉族");user.setHometown("中国北京市通州");List<String> userhbs=new ArrayList<>();userhbs.add("爬⼭");userhbs.add("游泳");userhbs.add("滑冰");user.setUserhbs(userhbs);Date date=new Date();model.addAttribute("data1",user);model.addAttribute("data2",date);return "test2";}@RequestMapping("test3")list.add("游泳");list.add("打篮球");model.addAttribute("data1",list);Map<String,String> map=new HashMap();map.put("key1","value1");map.put("key2","value2");map.put("key3","value3");model.addAttribute("data2",map);return "test3";}@RequestMapping("test4")public String test4(Model model){User user1=new User();user1.setUsername("Jim");user1.setUsersex("male");user1.setUserage(18);User user2=new User();user2.setUsername("Tom");user2.setUsersex("female");user2.setUserage(19);User user3=new User();user3.setUsername("Stone");user3.setUsersex("male");user3.setUserage(20);List<User> users=new ArrayList<>();users.add(user1);users.add(user2);users.add(user3);model.addAttribute("users",users);return "test4";}@RequestMapping("test5")public String test5(Model model){model.addAttribute("str1","ABCD");model.addAttribute("str2","abcd");model.addAttribute("intData1",159);model.addAttribute("intData2",753);return "test5";}@RequestMapping("test6")public String test6(Model model){model.addAttribute("scoreMath",65);model.addAttribute("scoreJava",90);return "test6";}@RequestMapping("test7")public String test7(Model model){model.addAttribute("htmlData","<h3 stype='color:red;font-weight:bold;'>你好,霍⾦先⽣,请⼀路⾛好!</h3>"); model.addAttribute("lowerData","ABCD");model.addAttribute("upperData","abcd");model.addAttribute("cfData","abcd");model.addAttribute("intData",123.456);return "test7";}@RequestMapping("test8")public String test8(Model model){return "test8_1";}@RequestMapping("test9")public String test9(Model model){model.addAttribute("data1","我是后台返回的⼀个数据");return "test9";}} WEB-INF/templates下的模板⽂件如下:hello.ftl<html><head><title>$Title$</title></head><body>你好啊。
freemarker的使用
freemarker的使⽤⼀:freemarker是什么?freemarker是⼀个模板引擎,基于定义的模板和数据⽣成对应的⽂本(HTML,xml,java等),是⼀个⽣成⽂本的⼯具。
⼆:freemarker的使⽤⽅法(1)在⼯程中引⼊freemarker相关的依赖<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency>View Code(2)使⽤的步骤第⼀步:创建⼀个Configuration对象,直接new⼀个即可,构造参数是freemarker的版本号第⼆步:设置模板⽂件所在的路径,需要给出在磁盘上储存的全路径第三步:设置⽣成的⽂件的编码格式,⼀般为utf-8格式第四步:加载模板,创建模板对象第五步:创建模板使⽤的数据集,可以使pojo也可以是map类型的第六步:创建Write流对象,将⽂件⽂件输出,需要指定⽣成的⽂件的名称第七步:调⽤模板的process⽅法,⽣成相应的⽂本第⼋步:关闭流@Testpublic void genFile() throws Exception {// 第⼀步:创建⼀个Configuration对象,直接new⼀个对象。
构造⽅法的参数就是freemarker对于的版本号。
Configuration configuration = new Configuration(Configuration.getVersion());// 第⼆步:设置模板⽂件所在的路径。
configuration.setDirectoryForTemplateLoading(new File("D:/workspace/item-web/src/main/webapp/WEB-INF/ftl"));// 第三步:设置模板⽂件使⽤的字符集。
freemarker使用流程
freemarker使用流程Freemarker使用流程Freemarker是一款流行的模板引擎,广泛应用于Java Web开发中。
它能够有效地将数据与展示分离,提高开发效率和代码的可维护性。
下面将介绍Freemarker的使用流程,帮助读者更好地理解和运用这一工具。
1. 熟悉Freemarker语法在使用Freemarker之前,首先需要熟悉其语法规则。
Freemarker 使用类似于HTML的标签和表达式来动态生成内容。
了解Freemarker的基本语法结构对于后续的开发至关重要。
2. 配置Freemarker环境在项目中引入Freemarker依赖,并配置Freemarker的相关参数,如模板文件的路径、编码方式等。
确保Freemarker能够正常工作,并与项目的其他组件协调配合。
3. 创建Freemarker模板编写Freemarker模板文件,定义页面的结构和内容。
在模板中可以使用Freemarker的标签和表达式来引用数据、控制流程和展示内容。
合理设计模板结构,提高页面的可读性和可维护性。
4. 准备数据模型准备与模板对应的数据模型,包括需要在页面中展示的数据内容。
数据模型可以是JavaBean、Map等形式,确保数据的准确性和完整性,以便在模板中进行引用和展示。
5. 渲染模板将数据模型与Freemarker模板进行结合,通过Freemarker引擎进行渲染。
在渲染过程中,Freemarker会根据模板中的标签和表达式动态生成最终的页面内容,将数据填充到指定位置。
6. 输出页面内容将渲染后的页面内容输出到浏览器或其他客户端,让用户可以看到最终的页面效果。
确保页面的呈现与预期一致,检查数据的展示是否准确,页面的布局是否符合设计要求。
7. 调试和优化在使用Freemarker的过程中,可能会遇到一些问题和性能瓶颈。
及时调试代码,查找并解决bug,优化页面性能和加载速度。
保持代码的简洁和高效,提升用户体验和开发效率。
ftl编辑器(freemarker)的使用和说明
一、准备工作1.1 下载文件可以从htt p://freema rker.source forg/站点下载最新的(最新版本是0.9.14)。
free marke r.jar包(目前最新版本是2.3.18)与eclip se插件1.2 安装ecli pse插件将下载来的e clips e插件解压缩到本地磁盘,更改huds on.freema rker_ide_0.9.14文件夹中的free marke r-2.3.6.jar文件更改成最新版本的fre emark er-2.3.18.jar,并且将MET A-INF/MANIFE ST.MF文件中的Bundl e-ClassP ath属性值修改为f reema rker-2.3.18.jar。
最后将hud son.freema rker_ide_0.9.14放到ec lipse的plug ins目录中,完成ecli pse 插件的安装。
1.3 freema rker文档下载从http://freema rker.source forg/官方网站中下载帮助文档(也有中文的手册)二、freema rker的使用2.1 简介2.1.1 FTL tag标签由于free marke r tag标签是属于fre emark er的指令,它们仅仅是f reema rker处理过程中的信息,而不会输出到页面上,所以它们与h tml标签有一些区别。
这些标签都是以#号开头,如<#import"/public/work_p ublic.ftl" as public>。
但用户自定义的标签是以@符号开头,如在free marke r中使用s truts标签:<@s.if test="result s!=null&&result s.size()!=0">注意FTL标签不可以在其他FTL标签和插值中使用(注释可以在F TL标签和插值中使用,因为它在解析时,整个注释都将抛弃,不会影响具体代码),如下面这样就是一个错误的写法:<#if <#includ e 'foo'>='bar'>...</#if>2.1.2 注释freema rker的文档注释与html相似,但它是以<#--和-->来分割的。
FreeMarer模板加载,使用FreeMarker加载远程主机上模板文件
FreeMarer模板加载,使⽤FreeMarker加载远程主机上模板⽂件FreeMarer 模板加载,使⽤FreeMarker加载远程主机上模板⽂件FreeMarker加载模板⽂件的三种⽅式:1、从⽂件⽬录加载2、从类路径加载3、从Servlet上下⽂加载其中第⼆个和第三个常⽤在Web开发环境中,类路径也会使⽤在普通的Java Project中,如果模板⽂件不是和应⽤程序放在同⼀台主机上,那么如何去读取和解析这些模板⽂件呢?答案是可以解决的,FreeMarker就提供给⼀种加载模板的⽅式,查看API就有URLTemplateLoader类,该类为抽象类,从名字就可以看出从给定的URL加载模板⽂件,这个URL并没有限定来源,来源可实现从FTP服务器,Hadoop,db等等。
那么可以⾃定义个加载器,从这个类继承,实现⾥⾯的getUrl⽅法即可:/*** ⾃定义远程模板加载器,⽤来加载远程机器上存放的模板⽂件.HTTP** @author wanglijun**/public class RemoteTemplateLoader extends URLTemplateLoader {// 远程模板⽂件的存储路径(⽬录)private String remotePath;private List<String> includePaths;public RemoteTemplateLoader(String remotePath) {if (remotePath == null) {throw new IllegalArgumentException("remotePath is null");}this.remotePath = canonicalizePrefix(remotePath);if (this.remotePath.indexOf('/') == 0) {this.remotePath = this.remotePath.substring(this.remotePath.indexOf('/') + 1);}}@Overridepublic Object findTemplateSource(String name) throws IOException {if(this.includePaths!=null&&this.includePaths.contains(name)){return super.findTemplateSource(name);}return null;}@Overrideprotected URL getURL(String name) {// name = name.replace("_zh", "");String fullPath = this.remotePath + name;System.out.println(fullPath);if ((this.remotePath.equals("/")) && (!isSchemeless(fullPath))) {return null;}URL url = null;try {url = new URL(fullPath);} catch (MalformedURLException e) {e.printStackTrace();}return url;}private static boolean isSchemeless(String fullPath) {int ln = fullPath.length();if ((i < ln) && (fullPath.charAt(i) == '/'))i++;while (i < ln) {char c = fullPath.charAt(i);if (c == '/')return true;if (c == ':')return false;i++;}return true;}public void setRemotePath(String remotePath) {this.remotePath = remotePath;}public List<String> getIncludePaths() {return includePaths;}public void setIncludePaths(List<String> includePaths) {this.includePaths = includePaths;}}Spring MVC配置⽂件如下:<!-- 针对free marker的视图 --><bean id="viewResolver"class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><property name="cache" value="false" /><property name="order" value="1" /><property name="viewClass"value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" /><!-- <property name="viewNames"> <array> <value>*.ftl</value> </array></property> --><property name="requestContextAttribute" value="request" /><property name="exposeSpringMacroHelpers" value="true" /><property name="exposeRequestAttributes" value="true" /><property name="exposeSessionAttributes" value="true" /><property name="allowSessionOverride" value="true" /><!--编码 --><property name="contentType" value="text/html;charset=UTF-8" /></bean><bean id="freeMarkerConfigurer"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><property name="configuration" ref="freemarkerConfiguration" /></bean><bean id="remoteTemplateLoader" class="com.saic.demo.web.RemoteTemplateLoader"> <constructor-arg name="remotePath" value="http://192.168.1.20:9090/" /><!--设置远程加载路径--><property name="includePaths"><list><value>footer.ftl</value><value>common/footer.ftl</value></list></property><util:list id="preTemplateLoaders" list-class="java.util.ArrayList"value-type="com.saic.demo.web.RemoteTemplateLoader"><ref bean="remoteTemplateLoader" /></util:list><bean id="freemarkerConfiguration"class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean"><property name="postTemplateLoaders" ref="preTemplateLoaders" /><!-- 模板加载路径 --><property name="templateLoaderPaths"><list><value>/WEB-INF/views/</value><value>classpath:/views/</value></list></property><property name="defaultEncoding" value="utf-8" /></bean>需要注意的是:通过远程加载模板,FreeMarker没有check远程加载此⽂件是否存在,所以只能通过本地列表(includePaths)判断是否存在,加快模板加载速度。
freemarker 模板路径
freemarker 模板路径Freemarker模板路径是指在使用Freemarker进行模板渲染时,Freemarker 引擎所使用的模板文件的存储路径。
在使用 Freemarker 进行开发时,我们通常需要在项目中指定模板路径,然后利用Freemarker 引擎进行模板渲染并生成 HTML 页面。
在指定模板路径时,我们需要考虑以下几个因素:1. 存储路径:首先,我们需要确定模板文件所存储的路径,即模板文件在项目中的位置。
通常情况下,模板文件存放在项目的某个文件夹中,可以是项目的根目录下的一个文件夹,也可以是src/main/resources 下的一个文件夹。
2. 路径格式:在指定模板路径时,我们需要注意路径的格式。
不同操作系统下,文件路径的格式可能会有所不同。
在 Windows 系统下,文件路径通常以 '' 作为分隔符,而在 Linux 和 Mac OS 系统下,则是以 '/' 作为分隔符。
因此,在指定模板路径时,我们需要根据当前操作系统来选择相应的路径分隔符。
3. 模板名称:在指定模板路径时,我们还需要指定要使用的模板文件的名称。
通常情况下,模板文件的名称以 '.ftl' 或 '.html' 结尾,以表示它是一个 Freemarker 模板文件或者 HTML 文件。
例如,在一个 Spring Boot 项目中,我们可以在application.properties 文件中指定 Freemarker 模板的存储路径:spring.freemarker.template-loader-path=classpath:/templates/这里,我们将模板文件存放在 src/main/resources/templates 文件夹中,并以 classpath:/templates/ 的形式指定了模板路径。
这样,当我们在控制器中调用 Freemarker 引擎进行模板渲染时,它会自动找到该路径下的模板文件并进行渲染。
springboot加载freemarker模板路径的方法
springboot加载freemarker模板路径的⽅法1,之前⽤的eclipse开发⼯具来加载spring boot加载freemarker模板路径,现在换⽤idea却不能使⽤了,所以来记录⼀下加载freemarker模板三种⽅式,如下public void setClassForTemplateLoading(Class clazz, String pathPrefix);public void setDirectoryForTemplateLoading(File dir) throws IOException;public void setServletContextForTemplateLoading(Object servletContext, String path);看名字也就知道了,分别基于类路径、⽂件系统以及Servlet Context。
第⼀种是我⽤idea,spring boot加载freemarker配置的①⾸先设置spring boot加载freemarker模板的配置(代替了xml配置),如下②通过Configuration来获取freemarker⽂件路径这个⽅法是根据类加载路径来判断的,最终会执⾏以下代码FreemarkerUtil.class.getClassLoader().getResource("/template/");第⼆种基于⽂件系统。
⽐如加载/home/user/template下的模板⽂件。
Configuration cfg = new Configuration();cfg.setDirectoryForTemplateLoading(new File("/home/user/template"));cfg.getTemplate("Base.ftl");这样就获得了/home/user/template/Base.ftl这个模板⽂件第三种基于web project。
freemarker !用法
freemarker !用法Freemarker是一种模板引擎,可以在Web应用中轻松地生成HTML,XML,JSON等文件。
它允许我们将数据和静态模板分离,从而使我们的代码更加清晰易读。
在这篇文章中,我们将探讨Freemarker的用法和一些最佳实践。
首先,我们需要了解Freemarker的基本语法。
Freemarker使用尖括号标记“<% %>"来定义内容块。
在这些标记内,我们可以使用变量,表达式,条件和迭代语句等。
例如,以下是一个简单的Freemarker模板:```<html><head><title>Hello, ${name}!</title></head><body><p>Welcome to our website!</p></body></html>```在这个模板中,我们使用了变量“name”。
这个变量可以在Java 代码中设置,并在生成HTML时插入到相应的位置。
为了在Java中使用Freemarker,我们需要引入Freemarker库,并创建一个Configuration对象:```Configuration cfg = newConfiguration(Configuration.VERSION_2_3_30);cfg.setClassForTemplateLoading(Main.class, "/templates"); cfg.setDefaultEncoding("UTF-8");```在这个例子中,我们设置了模板目录,并设置了默认编码为UTF-8。
然后,我们可以使用TemplateLoader从模板文件读取模板:```Template template = cfg.getTemplate("hello.ftl");```接下来,我们需要将我们的数据传递给数据模型。
freemarker使用流程
freemarker使用流程Freemarker是一种模板引擎,它可以将数据和模板结合起来生成最终的输出。
它可以用于Java、.NET、PHP等多种编程语言中,本文将以Java为例介绍Freemarker的使用流程。
1. 下载Freemarker首先需要下载Freemarker的jar包,可以在官网上下载最新版本。
下载完成后将jar包添加到项目的classpath中。
2. 创建模板文件Freemarker使用.ftl作为模板文件的扩展名,创建一个.ftl文件并编写模板代码。
例如:```<html><head><title>${title}</title></head><body><h1>${heading}</h1><ul><#list items as item><li>${item}</li></#list></ul></body></html>```在这个例子中,`${}`是Freemarker的语法,表示要替换成实际的值。
`${title}`、`${heading}`和`${item}`都是变量名,在生成输出时会被替换成相应的值。
3. 创建数据模型数据模型是一个Java对象或Map,它包含了模板所需要的数据。
例如:```Map<String, Object> data = new HashMap<>();data.put("title", "My Website");data.put("heading", "Welcome to my website!");List<String> items = new ArrayList<>();items.add("Item 1");items.add("Item 2");items.add("Item 3");data.put("items", items);```在这个例子中,我们创建了一个Map对象,包含了模板需要的三个变量:`title`、`heading`和`items`。
freemarker的template用法
freemarker的template用法Freemarker是一个模板引擎,主要用于生成动态内容,如HTML网页、电子邮件、配置文件等。
下面是Freemarker的一些常用模板用法:1. 变量插值:使用`${变量名}`插入变量的值。
例如:```<h1>${title}</h1>```2. 条件判断:使用`<#if>...</#if>`结构来执行条件判断。
例如:```<#if condition>...<#else>...</#if>```3. 循环迭代:使用`<#list>...</#list>`结构来进行循环迭代。
例如:```<#list items as item><li>${item}</li></#list>```4. 定义宏:使用`<#macro>...</#macro>`定义一个宏。
例如:```<#macro greet name>Hello ${name}!</#macro>```5. 调用宏:使用`<@宏名>...</@宏名>`调用一个宏。
例如:```<@greet "John" />```6. 引入外部模板:使用`<#include "模板路径">`引入外部模板。
例如:```<#include "header.ftl">```以上是Freemarker的一些常用模板用法,可以根据实际需求灵活运用。
freeMarkerTomcat配置文档
1、context.xml里配置:把context里加入privileged="true" 例如:<Context privileged="true">2、Web.xml里的配置:2.1打开下面的代码<servlet><servlet-name>ssi</servlet-name><servlet-class>org.apache.catalina.ssi.SSIServlet</servlet-class><init-param><param-name>buffered</param-name><param-value>1</param-value></init-param><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>expires</param-name><param-value>666</param-value></init-param><init-param><param-name>isVirtualWebappRelative</param-name><param-value>0</param-value></init-param>后加的代码<init-param><param-name>inputEncoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>outputEncoding</param-name><param-value>UTF-8</param-value></init-param><load-on-startup>4</load-on-startup></servlet>2.2打开下面的代码<servlet-mapping><servlet-name>ssi</servlet-name><url-pattern>*.shtml</url-pattern></servlet-mapping>2.3 FreeMarker类中的代码public FreeMarkerManager() //创建一个管理生成静态页面的对象{cfg = new Configuration();//初始化配置,创建对象//cfg.setEncoding(Locale.CHINA, "UTF-8");//定义FreeMarker生成静态页的编码方式cfg.setDefaultEncoding("UTF-8");root = new HashMap(); //创建一个HASH表loadTemp();}public void createFile(String mb,String path,String fileName) {try {t = cfg.getTemplate(mb+".ftl");t.setEncoding("UTF-8");//需要设置的代码} catch (IOException e2) {e2.printStackTrace();}file = new File(path+fileName);file.delete();if (!file.exists()) {try {file.createNewFile();} catch (IOException e3) {e3.printStackTrace();}}try {FileWriter fw = new FileWriter(file);Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"utf-8"));//需要设置的代码try {t.process(root, out);} catch (TemplateException e1) {e1.printStackTrace();}fw.close();} catch (IOException e) {e.printStackTrace();}}。
freemarker 用法
freemarker 用法Freemarker 是一种模板引擎,广泛用于JavaWeb 开发中。
它提供了一种将数据模型与视图层分离的方式。
在使用Freemarker 进行开发时,我们首先需要了解一些基本的用法和语法规则。
本文将一步一步回答关于Freemarker 的常见问题,并介绍它的基本用法与功能。
一、什么是Freemarker?Freemarker 是一个模板引擎,它能够根据模板以及给定的数据模型生成最终的文本输出。
它使用简单明了的标记语言,允许开发者通过填充数据模型来动态生成页面内容。
二、如何引入Freemarker?要使用Freemarker,我们首先需要引入它的依赖。
通常情况下,我们可以在Maven 项目的pom.xml 文件中添加以下依赖:xml<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.27-incubating</version></dependency>三、如何配置Freemarker?在Spring Boot 项目中,我们可以使用`@Configuration` 注解来配置Freemarker。
通过`FreeMarkerConfigurer` 类,我们可以设置Freemarker 的一些参数,例如模板文件所在的路径、编码方式等。
java@Configurationpublic class FreemarkerConfig {@Beanpublic FreeMarkerConfigurer freeMarkerConfigurer() {FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();configurer.setTemplateLoaderPath("classpath:/templates");configurer.setDefaultEncoding("UTF-8");return configurer;}}在上述代码中,我们设置了模板所在的路径为classpath:/templates,这意味着我们的模板文件将在项目resources 目录下的templates 文件夹中。
使用FreeMarker配置动态模板
使⽤FreeMarker配置动态模板FreeMarker动态模板⽬录前⾔当我们开发功能时,不仅要考虑当前,也要考虑之后的迭代.对于邮件正⽂内容,有时候需要配置HTML格式,所以选择了FreeMarkerFreeMarker的依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>其余Spring相关依赖<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>项⽬结构创建 Configuration 实例package com.lizi.util;import freemarker.template.Configuration;import freemarker.template.Template;import lombok.extern.slf4j.Slf4j;import ponent;import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;import javax.annotation.PostConstruct;import java.util.Locale;/*** @author lizi* @description FreeMarkerUtil* @date 2022/01/01*/@Component@Slf4jpublic class FreeMarkerUtil {private static Configuration configuration = null;@PostConstructpublic void init() {if (null == configuration) {// 设置版本号configuration = new Configuration(Configuration.VERSION_2_3_23);// ”/template“为模板⽂件来源configuration.setClassForTemplateLoading(FreeMarkerTemplateUtils.class, "/template"); // 设置编码格式configuration.setEncoding(Locale.CHINA, "UTF-8");}}/*** @param file template⽂件路径* @param data 数据* @return String*/public static String getResult(String file, Object data) {String result = "";try {// 获取通⽤模板Template template = configuration.getTemplate(file);// 通过模板创建动态数据result = FreeMarkerTemplateUtils.processTemplateIntoString(template, data);} catch (Exception e) {log.error("processTemplateIntoString error : {} ", e.getMessage());}return result;}}package com.lizi.controller;import com.lizi.Entity.Pokemon;import com.lizi.util.FreeMarkerUtil;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;import java.util.Map;/*** @author lizi* @description FreeMarkerController* @date 2022/01/01*/@RestControllerpublic class FreeMarkerController {@PostMapping("/getTemplate")public String getTemplate() {// 创建数据模型Map<String, Object> dataMap = new HashMap<>(16);Map<String, Object> map = new HashMap<>(16);map.put("珍珠", "pearl");map.put("钻⽯", "diamond");Pokemon pokemon=new Pokemon();pokemon.setName("ground_dragon");pokemon.setRace("108,130,95,80,85,102");dataMap.put("strong",pokemon);dataMap.put("pokemon", map);dataMap.put("ground_dragon","108,130,95,80,85,102");return FreeMarkerUtil.getResult("template.ftl", dataMap);}}模板⽂件对于模板语⾔,可以更多的去参考官⽅⽂档,<html><#-- 传⼊类型是Map ${ground_dragon} 表⽰对Map.get("ground_dragon") --><td>${ground_dragon}</td><#-- 我传⼊的类型是Map 这⾥pokemon 表⽰Map.get("pokemon")之后获取的value 代码中也是⼀个Map --> <#if pokemon?exists><#-- list,表⽰遍历 --><#list pokemon?keys as key><tr><td>${key}</td><td>${pokemon[key]}</td></tr></#list></#if><#-- Map.get("strong") 是⼀个⾃定义类访问属性可以直接⽤.的⽅式获取 --><td>${}</td><td>${strong.race}</td></body></html>调⽤结果<html><td>108,130,95,80,85,102</td><tr><td>钻⽯</td><td>diamond</td></tr><tr><td>珍珠</td><td>pearl</td></tr><td>ground_dragon</td><td>108,130,95,80,85,102</td></body></html>1. 对于传⼊的数据模型,需要⽤Map做⼀层包装,不然会出错2. 如果对象可能不存在,需要做⼀层判断,不然会出错。
freemaker模板引擎使用详解
freemaker模板引擎使⽤详解⽬录:⼀.freemaker介绍⼆.freemaker的使⽤正⽂:⼀.freemaker介绍1.1FreeMarker概述:FreeMarker是⼀款模板引擎,即⼀种基于模板和要改变的数据,并⽤来⽣成输出⽂本(HTML⽹页,电⼦邮件,配置⽂件,源代码等)的通⽤⼯具。
1.2获得FreeMarker下载FreeMarker jar包:中⽂⽹:使⽤Maven依赖jar包:<dependency><groupId>org.freemarker</groupId><artifactId>freemarker-gae</artifactId><version>2.3.25-incubating</version></dependency>⼆.FreeMarker的使⽤2.1、新建⼀个基于Maven的Web项⽬2.2、添加依赖这⾥没有使⽤MVC,只需依赖FreeMarker、Servlet与JSP核⼼包就可以了,修改后的pom.xml⽂件如下。
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zhangguo</groupId><artifactId>SpringMVC71</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><dependencies><!-- FreeMarker --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker-gae</artifactId><version>2.3.25-incubating</version></dependency><!-- Servlet核⼼包 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><!--JSP --><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency></dependencies></project>依赖成功的结果:2.3、创建⽂章POJO类在src/main/java源代码⽬录下创建Article.java⽂件,该类代表⽂章,代码如下:package com.zhangguo.springmvc71.entities;/*** ⽂章**/public class Article {/** 编号*/private int id;/** 标题*/private String title;/** 内容*/private String content;public Article() {}public Article(int id, String title, String content) {super();this.id = id;this.title = title;this.content = content;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}@Overridepublic String toString() {return "Article [id=" + id + ", title=" + title + ", content=" + content + "]";}}2.4、创建⽂章业务类在src/main/java源代码⽬录下创建ArticleService.java⽂件,该类代表⽂章业务,主要提供⽂章数据,定义了⼀个⽂章集合中,初始化时向集合中随意添加了5个⽂章对象,代码如下:package com.zhangguo.springmvc71.Services;import java.util.ArrayList;import java.util.List;import com.zhangguo.springmvc71.entities.Article;/*** ⽂章业务类(模拟)**/public class ArticleService {private static List<Article> articles;static {articles = new ArrayList<Article>();articles.add(new Article(20160701, "不明真相的美国⼈被UFO惊呆了其实是长征7号","据美国《洛杉矶时报》报道,当地时间周三晚(北京时间周四),在美国中西部的犹他州、内华达州、加利福利亚州,数千⼈被划过夜空的神秘⽕球吓到"));articles.add(new Article(20160702, "法国巴黎圣母院为教堂恐袭案遇害神⽗举⾏⼤弥撒", "⽽据美国战略司令部证实,其实这是中国长征七号⽕箭重新进⼊⼤⽓层,刚好经过加利福利亚附近。
freemarker配置步骤
Gd2}4wRJxQ0
字符串:简单文本,在模板中利用引号(单引号或双引号)括起
w*pMiU)v7@ \T0
数字:在模板中直接利用数字值海岸线网络聚合/RA w"}(O`)d3{d ~
日期:存储日期/时刻相关的数据,能够是日期、时刻或日期-时刻(Timestamp);通常情形,日期值由程序员加到数据模型中,设计者只需要显示它们
6Ckkc,U7]sV+e0
布尔值:true或false,通常在<#if …>标记中利用海岸线网络聚合g^'E
I"l? N:
7K\"su iFT{Fu`0
hashes:充当其它对象的容器,每一个都关联一个唯一的查询名字。它具有一个唯一的查询名字和它包括的每一个变量相关联海岸线网络聚合 Ns6}Zym ef!x
FreeMarker是免费的
\
IFW3| K2d0
5ivH gd w lApe0
FreeMarker框架剖析
FreeMarker的目标是生成各类文本,而且他是轻量级的,而且还不能算是一个严格意义上的框架只是一个引擎或说是一个工具。
x-I8d)AQ$| Nee0
FreeMarker的特点:海岸线网络聚合/SYW1c)md6~7z
d&Dsxm|IL0
海岸线网络聚合1R$hk7uos%e8G#PL
FTL区分大小写,因此list是正确的FTL指令,而List不是;${name}和${NAME}是不同的。Interpolation只能在文本中利用。FTL标记不能位于另一个FTL标记内部。
~,S^$]@l
[Dz0
海岸线网络聚合HV{OD0N
`6o6p4\3nY0aEw0
两种freemarker模板路径设置方法
<beans>
<beanid="freeMarkerConfigurer"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
补一段代码:
@Component
public class TemplateServiceFreeMarkerImpl implements TemplateService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
<propertyname="templateLoaderPath"value="/WEB-INF/config/template/"/>
<propertyname="freemarkerSettings">
<props>
<propkey="template_update_delay">0</prop>
Template t =freeMarkerConfiguration.getTemplate(templateName);
returnFreeMarkerTemplateUtils.processTemplateIntoString(t, model);
freemarker 技巧
freemarker 技巧
FreeMarker是一个基于Java语言的模板引擎,它支持非常丰富的语法,在使用过程中有以下一些技巧:
- 设置模板根目录:通过Configuration对象的setDirectoryForTemplateLoading方法指定模板根目录。
- 创建模板对象:通过Configuration对象的getTemplate方法创建模板对象。
- 整合模板内容:通过Template对象的process方法整合模板内容并写入输出对象。
- 使用变量:模板变量使用${...}表示,“...”就是Map对象的键名。
如果变量是一个结构,可以通过${xxx.yyy}调用结构属性,其中“xxx”是结构对应的Map对象的键名,“yyy”是结构的属性名称。
在使用FreeMarker时,可以根据实际需求灵活运用这些技巧,以提高工作效率和代码质量。
freemaker学习笔记 指令参考
freemaker学习笔记--指令参考freemaker学习笔记--指令参考 - 不做浮躁的人 - BlogJavafile:////G|/delect/delect-/freemake/freemaker学习笔记--指令参考 - 不做浮躁的人 - BlogJava.htm[2009-5-3 9:28:03]freemaker学习笔记--指令参考 - 不做浮躁的人 - BlogJava如果当前模版在/foo/bar/template.ftl ,那么查找footer.ftl的顺序为:/foo/bar/footer.ftl/foo/footer.ftl/footer.ftl这种方式讲允许设计者将通用的模版放在父文件夹里面。
也可以只指定部分路径:<#include "*/commons/footer.ftl">五:import指令<#import path as hash>六:noparse<#noparse> ...</#noparse>七:compress<#compress> ...</#compress>八:escape,noescape<#escape identifier as expression> ...<#noescape>...</#noescape> ...</#escape>escape指令body区的ftl的interpolations都会被自动加上escape表达式。
但是不会影响字符串内的interpolations。
而且也只会影响到body内出现的interpolations,比如不会影响到include的ftl的interpolations。
<#escape x as x?html> First name: ${firstName} Last name: ${lastName} Maiden name: ${maidenName}</#escape>等同于:First name: ${firstName?html} Last name: ${lastName?html} Maiden name: ${maidenName?html}escape指令在解析模版时起作用,而不是运行时起作用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<props>
<propkey="template_update_delay">0</prop>
<propkey="default_encoding">GBK</prop>
<propkey="locale">zh_CN</prop>
return FreeMarkerTemplateUtils.processTemplateIntoString(t, model);
} catch (Exception e) {
e.printStackTrace();
logger.equals(ssage());
}
}
return null;
returnFreeMarkerTemplateUtils.processTemplateIntoString(t, model);
//NONE WEB
Template t =freeMarkerConfiguration.getTemplate(templateName);
returnFreeMarkerTemplateUtils.processTemplateIntoString(t, model);
public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {
this.freeMarkerConfigurer = freeMarkerConfigurer;
}
public void setFreeMarkerConfiguration(Configuration freeMarkerConfiguration) {
<beans>
<beanid="freeMarkerConfigurer"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<propertyname="templateLoaderPath"value="/WEB-INF/config/template/"/>
this.freeMarkerConfiguration = freeMarkerConfiguration;
}
public String getContent(String templateName, Map<String, Object> model) {
try {
Template t = freeMarkerConfigurer.getConfiguration().getTemplate(templateName);
</bean>
<beanid="templateService"class="com.ahtec.ssi.service.impl.TemplateServiceFreeMarkerImpl">
<propertyname="freeMarkerConfigurer"ref="freeMarkerConfigurer"/>
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
@Autowired
private Configuration freeMarkerConfiguration;
<list>
<value>/Freemarker/</value>
<value>/Freemarker/error/</value>
</list>
</property>
</bean>
</props>
</property>
</bean>
<beanid="freeMarkerConfiguration"class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
<propertyname="templateLoaderPath"value="file:D:/Java/workspace/project/WebContent/WEB_INF/config/template"/>
return FreeMarkerTemplateUtils.processTemplateIntoString(t, model);
} catch (Exception ex) {
ex.printStackTrace();
logger.equals(ex.getMessage());
try {
Template t = freeMarkerConfiguration.getTemplate(templateName);
<propertyname="freeMarkerConfiguration"ref="freeMarkerConfiguration"/>
</bean>
</beans>
//WEB
Template t =freeMarkerConfigurer.getConfiguration().getTemplate(templateName);
}
}
Freemarker多路径配置方法:
<beanid="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<propertyname="templateLoaderPaths">
在 web 中,可以方便地定位到WEB_INF目录,但在非web中就不那么容易了。综合考虑,将ftl模板放在classpath目录挺好的。用classpath:来定位模板位置。
补一段代码:
@Component
public class TemplateServiceFreeMarkerImpl implements TemplateService {