如何使用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 ,里面讲得非常祥细。

 转载请注明出自同行网,谢谢!

posted @ 2012-11-14 06:05  wj-conquer  阅读(1480)  评论(0编辑  收藏  举报