Freemarker的使用


1.首先說下什么是freemarker?

FreeMarker 是一款 模板引擎: 即一種基於模板和要改變的數據, 並用來生成輸出文本(HTML網頁,電子郵件,配置文件,源代碼等)的通用工具。 它不是面向最終用戶的,而是一個Java類庫,是一款程序員可以嵌入他們所開發產品的組件。

模板編寫為FreeMarker Template Language (FTL)。它是簡單的,專用的語言, 不是 像PHP那樣成熟的編程語言。 那就意味着要准備數據在真實編程語言中來顯示,比如數據庫查詢和業務運算, 之后模板顯示已經准備好的數據。在模板中,你可以專注於如何展現數據, 而在模板之外可以專注於要展示什么數據。

這種方式通常被稱為 MVC (模型 視圖 控制器) 模式,對於動態網頁來說,是一種特別流行的模式。 它幫助從開發人員(Java 程序員)中分離出網頁設計師(HTML設計師)。設計師無需面對模板中的復雜邏輯, 在沒有程序員來修改或重新編譯代碼時,也可以修改頁面的樣式。

而FreeMarker最初的設計,是被用來在MVC模式的Web開發框架中生成HTML頁面的,它沒有被綁定到 Servlet或HTML或任意Web相關的東西上。它也可以用於非Web應用環境中。

說白點,就是可以根據提供的數據和創建好的模板,去自動的創建html靜態頁面.

放在電商項目中的話,比如說商品詳情頁面,為了減少數據庫的壓力,提高用戶體驗度,我們想到了如果直接把商品詳情頁面准備好,那么久不需要在去數據庫查找了,節約了大量的資源.

freemarker就是起到了這么一個作用,每增加一個商品就自動生成一個靜態頁面,保存到web層中.

 

 

2.下面簡單寫一個測試類

首先創建一個maven工程,導入所需要的jar包信息

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();
}

}

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM