Freemarker的使用
1.首先說下什麼是freemarker?html
FreeMarker 是一款 模板引擎: 即一種基於模板和要改變的數據, 並用來生成輸出文本(HTML網頁,電子郵件,配置文件,源代碼等)的通用工具。 它不是面向最終用戶的,而是一個Java類庫,是一款程序員能夠嵌入他們所開發產品的組件。java
模板編寫爲FreeMarker Template Language (FTL)。它是簡單的,專用的語言, 不是 像PHP那樣成熟的編程語言。 那就意味着要準備數據在真實編程語言中來顯示,好比數據庫查詢和業務運算, 以後模板顯示已經準備好的數據。在模板中,你能夠專一於如何展示數據, 而在模板以外能夠專一於要展現什麼數據。程序員
這種方式一般被稱爲 MVC (模型 視圖 控制器) 模式,對於動態網頁來講,是一種特別流行的模式。 它幫助從開發人員(Java 程序員)中分離出網頁設計師(HTML設計師)。設計師無需面對模板中的複雜邏輯, 在沒有程序員來修改或從新編譯代碼時,也能夠修改頁面的樣式。web
而FreeMarker最初的設計,是被用來在MVC模式的Web開發框架中生成HTML頁面的,它沒有被綁定到 Servlet或HTML或任意Web相關的東西上。它也能夠用於非Web應用環境中。spring
說白點,就是能夠根據提供的數據和建立好的模板,去自動的建立html靜態頁面.數據庫
放在電商項目中的話,好比說商品詳情頁面,爲了減小數據庫的壓力,提升用戶體驗度,咱們想到了若是直接把商品詳情頁面準備好,那麼久不須要在去數據庫查找了,節約了大量的資源.apache
freemarker就是起到了這麼一個做用,每增長一個商品就自動生成一個靜態頁面,保存到web層中.編程
2.下面簡單寫一個測試類api
首先建立一個maven工程,導入所須要的jar包信息tomcat
pom.xml
<parent>
<groupId>com.taotao</groupId>
<artifactId>taotao-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>freemarker</groupId>
<artifactId>TestFreemarker</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>TestFreemarker Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!--這個必定要有、不用報錯-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- JSP相關 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
</dependencies>
<build>
<finalName>TestFreemarker</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>8080</port>
</configuration>
</plugin>
</plugins>
</build>
這裏我沒有初版本,由於我繼承了以前的一個項目
接下來是WEB.xml
<!-- 編碼格式UTF-8 -->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>TestFreemarker</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>TestFreemarker</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
最後配置一個springMVC就能夠了
<!-- 配置註解驅動 -->
<mvc:annotation-driven />
<!-- 視圖解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/html/"/>
<property name="suffix" value=".html" />
</bean>
<!-- 配置包掃描器,掃描@Controller註解的類 -->
<context:component-scan base-package="controller"/>
<!-- Freemarker配置 -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="WEB-INF/view/" />
<property name="freemarkerSettings">
<props>
<prop key="incompatible_improvements">2.3.23</prop>
<prop key="template_exception_handler">rethrow</prop>
<prop key="default_encoding">UTF-8</prop>
</props>
</property>
</bean>
<!-- freemarker視圖解析器 -->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix" value=".ftl" />
<property name="contentType" value="text/html;charset=UTF-8" />
<!-- 此變量值爲pageContext.request, 頁面使用方法:rc.contextPath -->
<property name="requestContextAttribute" value="rc" />
</bean>
還須要定義一個模板,這個模板是根據本身的數據來進行配置的,實際上他就是一個html
<html>
<head>
<meta charset="UTF-8">
<title>學生信息</title>
</head>
<body>
<center><h1>學生信息管理</h1></center>
<table border="1" cellspacing="0" align="center">
<tr>
<td>姓名:</td>
<td>${a.name}</td>
</tr>
<tr>
<td>年齡:</td>
<td>${a.age}</td>
</tr>
<tr>
<td>性別:</td>
<td>${a.sex}</td>
</tr>
</table>
</body>
</html>
最後就該寫測試類了
package controller;
import java.io.FileWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import freemarker.template.Configuration;
import freemarker.template.Template;
@Controller
public class TestFreemarker {
@Resource
FreeMarkerConfigurer freeMarkerConfigurer;
@RequestMapping("/free/{name}")
public String createHtml(@PathVariable String name)throws Exception{
//獲取鏈接
Configuration configuration = freeMarkerConfigurer.getConfiguration();
//獲取數據
Map<String,Student> stu=new HashMap<String,Student>();
//添加數據,這個就是本身建立的一個類
stu.put("a", new Student("喬偉","22","男"));
//獲取ftl,因爲已經在配置文件中配置了路徑因此在這裏直接寫模板名稱就能夠
Template template = configuration.getTemplate("hello.ftl");
//輸出文件路徑
Writer wr=new FileWriter("D:\\jiyun\\work-space1\\TestFreemarker\\src\\main\\webapp\\WEB-INF\\html\\"+name+".html");
//寫入
template.process(stu, wr);
//關閉流
wr.close();
return name;
}
}
在附上Student類
public class Student {
private String name;
private String age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Student(String name, String age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public Student() {
super();
}
}