Freemark----基本数据类型(对象)
来源:互联网 发布:北京seo博客 编辑:程序博客网 时间:2024/09/21 06:34
关于Freemark的原理:
模板引擎 + 数据 ------------------> 页面输出
一、什么是模板引擎,为什么要用模板引擎
在B/S程式设计中,常常有美工和程序员二个角色,他们具有不同专业技能:美工专注于表现——创建页面、风格、布局、效果等等可视元素;而程序员则忙于创建程式的商业流程,生成设计页面要显示的数据等等。
很多时候,要显示的资料在设计的时候并不存在,它们一般是在运行时由程式产生的,比如执行“价格不高于800NT的USB Disk”查询的返回结果。这种技术需求产生了JSP等Scriptlet,JSP十分强大,但是也常常被滥用,并导致一些不良的后果
- 将逻辑和表现混合在一起。
- 破坏了美工和程序员职责的正常分解。
- 使JSP页面难以阅读和维护。
模板引擎就是为了解决上面的问题而产生的。在设计HTML的时候,我们加入一些特定指令来指定要插入哪些数据,这些加了特殊指令的HTML或者其他文本,我们称为模板(Template)。而模板引擎会在输出页面时,用适当的数据替代这些代码。
模板和嵌入JSP的HTML是不同的,模板指令只有很有限的编程能力,可以避免混入商业逻辑。
FreeMarker缺点:
1. 性能没有Velocity高,学习起来没有Velocity简单
2. 需要花费时间重新学习
3. FreeMarker中不能读取值为null的变量,会报错,必须要设置默认值或者判断
4. 模板修改之后,如果没有更新模板生成的HTML,会看到过期的页面
5. MyEclipseIDE插件的效果不太好环境Maven,需要freemark.jar,pom文件如下:
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lgy</groupId> <artifactId>freemarker</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>freemarker Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <!-- servlet,jsp --> <dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.4</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency> <!-- freemark --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.22</version></dependency> </dependencies> <build> <finalName>freemarker</finalName> </build></project>
步骤:
1.编写模板文件:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>freemark 测试</title></head><body>${person.id!"aaa"} <!-- 如果为null则打印aaa -->-----------------------------------------------<br /><#if person.id??> <!-- if else语句 (person.id=null) -->wo qu <#else> yufa piaoyi</#if>-----------------------------------------------<br /><#if person.flag> <!-- if else语句 (person.flah=true) -->ye li shame </#if>------------------------------------------------<br /><#switch person.username><#case "aa"> 1<#break><#case "hahah"> 2<#break><#default> 3</#switch></body></html>
说明:person为一个对象
package com.lgy.entry;public class Person {private Integer id;private String username;private String password;private Boolean flag = true;public Boolean getFlag() {return flag;}public void setFlag(Boolean flag) {this.flag = flag;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
第二步(核心代码说明):
package com.lgy.test;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.util.HashMap;import java.util.Map;import org.junit.Before;import org.junit.Test;import com.lgy.entry.Person;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;/* * 模板 + 数据 = 输出 */public class FreeMarkerTest {private Configuration configuration;@SuppressWarnings("deprecation")@Beforepublic void init() {configuration = new Configuration();try {configuration.setDirectoryForTemplateLoading(new File("F://Users/Maven/freemarker/src/main/webapp/freemark"));} catch (IOException e) {e.printStackTrace();}}@Testpublic void FreemarkTest() {OutputStreamWriter out = null;File file = new File("F://Users/Maven/freemarker/src/main/webapp/index.html"); //创建一个合适的Configration对象 try {out = new OutputStreamWriter(new FileOutputStream(file)); //创建模版对象 Template t = configuration.getTemplate("index-string.html"); Person person = new Person(); person.setUsername("hahah");//构造填充数据的Map Map<String, Object> map = this.getData("person", person); //在模版上执行插值操作,并输出到制定的输出流中 t.process(map, out); out.close();System.out.println("生产完成");} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();} finally {if(out != null) {try {out.close();} catch (IOException e) {e.printStackTrace();}}}}public Map<String, Object> getData(String key, Object value) { Map<String, Object> map = new HashMap<String, Object>(); map.put(key, value); return map;} }
- Freemark----基本数据类型(对象)
- 【Freemark】-基本数据类型
- freemark学习(二):freemark的数据类型(1)
- 基本数据类型和对象
- 基本数据类型的对象
- Freemark基本语法
- freemark的基本使用
- 基本数据类型对象+集合对象
- 基本数据类型对象包装类
- 基本数据类型的包装对象
- 基本数据类型对象包装类
- 黑马程序员------基本数据类型对象
- 基本数据类型对象包装类
- 基本数据类型对象包装类
- 基本数据类型对象包装类
- 基本数据类型对象包装类
- 基本数据类型对象包装类
- 基本数据类型对象包装类
- 导出excel公用js方法
- java随机数
- 三大框架整合(Struts2 Spring Hibernate)
- 遍历二叉树的各种操作
- C#后台把多个字符串结果封装成JSON格式并返回前台解析
- Freemark----基本数据类型(对象)
- Android SSL
- spring log4j 集成的那些事
- Mac 10.10.2 编译android 4.4_r1.2
- struts2源码解析
- 【cocos2d-x 3.5】Lua读取CSV
- 关于android应用程序入口
- 使用 RMI + ZooKeeper 实现远程调用框架
- ORACLE使用一条SQL语句搞定星期月历 软件报20071217N51P16