Freemarker生成HTML静态页面
这段时间的工作是做一个网址导航的项目,面向用户的就是一个首页,于是就想到了使用freemarker这个模板引擎来对首页静态化。
之前是用jsp实现,为了避免用户每次打开页面都查询一次数据库,所以使用了jsp的内置对象application,在Controller中将数据都查询出来,
然后放入application,最后在JSP页面使用jstl标签配合EL表达式 将数据遍历出来。这样做是从一定程度上减轻了服务器的压力和页面的响应速度,
但是仍然没有静态页面响应快。
使用Freemarker步骤:
- jar包,我的项目中使用maven来构建,所以在pom.xml中引入Freemarker jar包的坐标就可以了。
- ftl模板,我在WEB-INF下面创建一个文件夹ftl,里面只放ftl模板文件,我创建了一个index.ftl文件。

- ftl模板文件中写的就是html标签和css样式之类的,但是数据部分需要使用Freemarker提供的标签遍历出来。如下
<!--广告悬浮-->
<div class="subMenu">
<!--工具-->
<div class='xff'>
<div class="slideTxtBox">
<div class="hd">
<span class="arrow"><a class="next"></a><a class="prev"></a></span>
<ul>
<#list newsMap?keys as testKey>
<li>${testKey}</li>
</#list>
</ul>
</div>
<div class="bd" style="padding: 5px 10px;">
<#list newsMap?values as value>
<div style="text-align: left; table-layout: fixed; word-wrap: break-word; width: 100%;" class="baidu">
<#list value as newsList>
<a target="_blank" href="${newsList.newsurl }" title="${newsList.newsname }">${newsList.newsname }</a>
</#list>
</div>
</#list>
</div>
</div>
</div>
</div>其中<#list></#list>是Freemarker提供的遍历标签,Freemarker提供了很多的标签,这里不一一叙述。
- Contorller中将数据都查询出来,通过ftl模板取出数据,最后将完整的数据写入html
// 获取搜索引擎
List<SearchEngines> searchEngines = this.indexService.findSearchEngines();
// 获取热搜客户
List<Catalog> hotSearchs = this.indexService.findHotSearchs();
// 获取前25个一级目录
CatalogCustom custom = new CatalogCustom();
custom.setCatalogLevel(1);
List<Catalog> topLevelCatalog = this.indexService.findCustomers(custom);
// 获取一级目录下的前十个客户
Map<String, List<Catalog>> customerMap = new HashMap<String, List<Catalog>>(); for (Catalog catalog : topLevelCatalog) {
CatalogCustom customer = new CatalogCustom();
customer.setCatalogLevel(3);
customer.setGfid(catalog.getCatalogId()); List<Catalog> customerList = this.indexService.findCustomers(customer); customerMap.put(catalog.getCatalogName(), customerList); }
// 获取新闻相关数据
Map<String, List<News>> newsMap = new HashMap<String, List<News>>();
List<NewsCatalog> newsCatalogs = this.indexService.findNewsCatalog(); for (NewsCatalog newsCatalog : newsCatalogs) { News news = new News();
news.setPid(newsCatalog.getId());
List<News> newsList = this.indexService.findNews(news); newsMap.put(newsCatalog.getNewscatalog(), newsList); }
// 获取关键词
List<Keywords> keywords = this.indexService.findKeywords();
/*
application.setAttribute("newsMap", newsMap);
application.setAttribute("searchEngines", searchEngines);
application.setAttribute("hotSearchs", hotSearchs);
application.setAttribute("customerMap", customerMap);
application.setAttribute("keywords", keywords);
*/ String ftlPath = session.getServletContext().getRealPath("/WEB-INF/ftl"); Configuration configuration = new Configuration();
configuration.setDirectoryForTemplateLoading(new File(ftlPath));
configuration.setDefaultEncoding("UTF-8");
// 获取或创建一个模版。
Template template = configuration.getTemplate("index.ftl");
// 获取html静态页面文件
String indexPath = session.getServletContext().getRealPath("/index.html");
//设置文件输入流编码,不然生成的html文件会中文乱码
FileWriterWithEncoding out = new FileWriterWithEncoding(indexPath,"UTF-8");
// 将页面中要展示的数据放入一个map中
HashMap<String,Object> map = new HashMap<String, Object>();
map.put("newsMap", newsMap);
map.put("searchEngines", searchEngines);
map.put("hotSearchs", hotSearchs);
map.put("customerMap", customerMap);
map.put("keywords", keywords);
//将map中的数据输入到index.ftl这个模板文件中并遍历出来,最后再将整个模板的数据写入到index.html中。
template.process(map, out);
out.close();
Freemarker生成HTML静态页面的更多相关文章
- 网页静态化解决方案:Freemarker生成简单html页面
FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP.它不仅 ...
- asp .net 模板引擎 使用 Razor 生成html静态页面
刚开始不是理解 写完之后 觉得还蛮简单的 分为这几个步骤 1.获取页面模板Html 2.获取数据 3.解析模板和数据,生成静态页Html代码 4.生成静态文件 模板形式是mvc的模式,会mvc 看一下 ...
- PHP生成HTML静态页面。
function Generate(){ $html = '<!DOCTYPE html><html lang="en"><head> < ...
- [freemarker篇]02.生成HTML的静态页面
昨天完成了一部分的今天在上次的基础上,完成完成生成HTML静态页面的操作,中间会涉及一点标签的简单使用.今天的代码有一丢丢的对付的感觉!抱歉了,直接就上代码吧!求原谅! 项目结构目录如下: 第一步,新 ...
- 浅谈php生成静态页面
一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...
- 用 Smarty 生成静态页面入门介绍
why Smarty? 随着公司首页(以下简称首页)流量越来越大,最近开始考虑使用后台语言生成静态页面的技术. 我们知道,一个简单页面一般是一个 .html(或者 .htm ..shtml)后缀的文件 ...
- 比较详细PHP生成静态页面教程
一,PHP脚本与动态页面. PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合, 也可以类,函数封装等形式,以模板的方式对用户请求进行处理.无论以何种方式,它的基本原理是这样的.由客 ...
- 三种C#.net生成静态页面的方法
ASP.NET生成静态页面方法主要有三种 第一种方法:向服务器的动态页面发送请求,获取页面的html代码.这种方法缺点显而易见:速度慢.另外如果请求的动态页面有验证控件的话,返回的html页面却无 ...
- PHP代码为什么不能直接保存HTML文件——>PHP生成静态页面教程
1.server会依据文件的后缀名去进行解析,假设是HTML文件则server不会进行语法解析.而是直接输出到浏览器. 2.假设一个页面中所有都是HTML代码而没有须要解析的PHP语法,则没有必要保存 ...
随机推荐
- 论文参考文献中J、M等是什么意思
最近不务正业的写论文,记录下常见的文献标示 国家期刊出版格式要求在中图分类号的下面应标出文献标识码,规定如下: 作者可从下列A.B.C.D.E中选用一种标识码来揭示文章的性质: A—理论与应用研究学术 ...
- VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)
鸡啄米在上一节中讲的是VS2010的菜单资源,本节主要讲菜单及CMenu类的使用. CMenu类的主要成员函数 MFC为菜单的操作提供了CMenu类,下面鸡啄米就常用的几个成员函数进行简单的介绍. B ...
- java编译 Error: Could not find or load main class java执行包main方法
在java源文件开头有包声明语句,编译的时候需要指定生成的class文件路径. 解决方法: javac -d your_path your_class.java 例如:javac -d . First ...
- 论文笔记:语音情感识别(四)语音特征之声谱图,log梅尔谱,MFCC,deltas
一:原始信号 从音频文件中读取出来的原始语音信号通常称为raw waveform,是一个一维数组,长度是由音频长度和采样率决定,比如采样率Fs为16KHz,表示一秒钟内采样16000个点,这个时候如果 ...
- Nginx启动SSL功能
Nginx启动SSL功能,并进行功能优化,你看这个就足够了 一:开始Nginx的SSL模块 1.1 Nginx如果未开启SSL模块,配置Https时提示错误 nginx: [emerg] the &q ...
- nginx作防盗链设置
盗链是一种损害原有网站合法权益,给原网站所在服务器造成额外负担的非法行为. 盗链的实现原理: 客户端向服务器请求资源时,为了减少网络带宽,提高响应时间,服务器一般不会一次将所有资源完整地传回给客户端. ...
- c++学习之map基本操作
map作为最常用的数据结构之一,用的好可以大幅度的提升性能. // java_cpp_perftest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h& ...
- JavaScript Match
JavaScript Match 版权声明:未经授权,严禁转载! 随机数 // 随机数 Math.random() 随机生成一个大于等于0且小于1的小数. // 0>= r < 1 [0, ...
- 20135234mqy-——信息安全系统设计基础第二周学习总结
Linux基础 1.Linux命令 command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数 选项(options)或参数(argument ...
- 20165211 预备作业3 Linux安装与学习
20165211 预备作业3 Linux安装与学习 1. Linux安装 涉及软件:VirtualBox,Ubuntu 参考教程:基于VirtualBox安装Ubuntu图文教程 安装过程的问题 在安 ...