如何使用freemarker将jsp网页静态化?
我们做好jsp的项目后, 要将jsp页面都转换成静态的html页面, 这样有利于收索引擎收录, 用户在访问页面时不用再去读数据库中的内容, 这样也大大提高了访问页面的速度。
最常用的是用freemarker来静态化jsp页面,
1. 如何配置安装freemarker的开发环境。
--》1.1. 去freemarker官网上下载最新的freemarker的jar包(freemarker-2.3.19)http://sourceforge.net/projects/freemarker/
--》1.2. 将freemarker.jar拷到eclipse的安装目录的plugins下。
--》1.3. 将freemarker.jar加载到你的项目中。
这样就OK了。
2. freemarker在项目中如何配置和使用。
--》2.1在项目的根目录下创建pom.xml来使项目与freemarker得到关联依赖。
pom.xml的代码如下:
<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>org.konghao.freemarker</groupId>
<artifactId>freemarker-hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>freemarker-hello</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.19</version>
</dependency>
</dependencies>
</project>
--》2.2 在项目中创建ftl目录, 供放ftl文件用。如: /freemarker-hello/src/main/java/ftl/01.ftl
--》2.3 freemarker的读写代码
package org.konghao.freemarker;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class FreemarkerUtil {
//getTemplate("01.ftl")
public Template getTemplate(String name) {
try {
//通过Freemaker的Configuration读取相应的ftl
Configuration cfg = new Configuration();
//设定去哪里读取相应的ftl模板文件
cfg.setClassForTemplateLoading(this.getClass(),"/ftl");
//在模板文件目录中找到名称为name的文件
Template temp = cfg.getTemplate(name);
return temp;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public void print(String name,Map<String,Object> root) {
try {
//通过Template可以将模板文件输出到相应的流
Template temp = this.getTemplate(name);
temp.process(root, new PrintWriter(System.out));
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void fprint(String name,Map<String,Object> root,String outFile) {
FileWriter out = null;
try {
//通过一个文件输出流,就可以写到相应的文件中
out = new FileWriter(new File("D:\\webservice\\ftl\\"+outFile)); //存放html文件的地方
Template temp = this.getTemplate(name);
temp.process(root, out);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} finally {
try {
if(out!=null) out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
--》2.4 ftl文件中的代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>${user.id}-----${user.name}-----${user.age}</h1>
<#if user.age lt 12>
${user.name}还是一个小孩
<#elseif user.age lt 18>
${user.name}快成年
<#else>
${user.name}已经成年
</#if>
</body>
</html>
说明一下, user是一个对象里面有属性id,name,age
package org.konghao.freemarker.model;
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
}
--》2.5 建立测试类
package org.konghao.freemarker.test;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.konghao.freemarker.FreemarkerUtil;
import org.konghao.freemarker.model.Article;
import org.konghao.freemarker.model.Channel;
import org.konghao.freemarker.model.Student;
import org.konghao.freemarker.model.User;
public class TestFreemarker {
FreemarkerUtil fu;
Map<String,Object> root = null;
@Before
public void setUp() {
fu = new FreemarkerUtil();
root = new HashMap<String,Object>();
}
@Test
/*读取对象中的属性的方法*/
public void test02() {
//freemarker还可以输出相应的对象
// root.put("user", new User(1,"李四",16));
User _User=new User();
_User.setId(1);
_User.setName("jason");
_User.setAge(30);
root.put("user", _User);
sprint("03.ftl");
fprint("03.ftl","03.html");
}
private void sprint(String name) {
fu.print(name, root);
}
private void fprint(String name,String filename) {
fu.fprint(name, root, filename);
}
}
可去下载一份 FreeMarker 手册FreeMarker_Manual_zh_CN.pdf ,里面讲得非常祥细。
转载请注明出自同行网,谢谢!