一、背景

  1、什么是FreeMarker

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 
FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 
虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图) 

  2、FreeMarker特性

    • 能够生成各种文本:HTML、XML、RTF、Java源代码等等
    • 易于嵌入到你的产品中:轻量级;不需要Servlet环境
    • 插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等
    • 你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器

二、整合

本示例是在spring的基础上整合freeMarker,所以对于spring的部分配置不重点关注;

1、项目目录结构

  其中:springmvc-servlet是spring与freeMarker整合配置文件,而WEB-INF下的文件夹中,ftl为freeMarker的模板,jsp为spring的模板,resource为一些静态文件;

2、pom.xml中加入freeMarker的依赖

 <!-- freemarker模板 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>

3、springmvc-servlet中的配置

     <!-- 配置Jsp视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
<property name="order" value="1" />
</bean> <!-- 配置freeMarker的模板路径 -->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/" /><!--注意这儿不要添加classpath-->
<property name="defaultEncoding" value="utf-8" />
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
</map>
</property>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="number_format">0.##########</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="locale">zh_CN</prop>
<prop key="classic_compatible">true</prop>
<prop key="template_exception_handler">ignore</prop>
</props>
</property>
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/> <!-- 配置freeMarker视图解析器 -->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<property name="contentType" value="text/html;charset=UTF-8"></property>
<property name="requestContextAttribute" value="request" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".ftl" />
<property name="order" value="0"/>
</bean>

  其中:

  1)jsp视图解析器与freeMarker视图解析器中的order属性,只有在spring项目多视图时才配置。上面配置中把freemarker的order设置为0,jsp为1。意思是找view时,先找ftl文件,再找jsp文件做为视图;

  2)我感觉配置中最重要的属性是templateLoaderPath,即ftl模板的位置。没有这个属性的支持,其他的属性不起作用。我按照网上的一个配置给他的value加了classPaht,结果spring找不到ftl模板位置,让我吃了不少苦头。所以classPath不能有。我的建议是,在spring整合freeMarker时,暂时先不用管jsp是不是404,freeMarker配置完成后,先来一个小示例,如果跳转之后,出现404并且路径后面有jsp,那证明要么是templateLoaderPath属性有问题,要么是order属性有问题。而且跳转成功后看看flt页面${}中的数据有没有解析,如果没有也是不成功的。等到ftl页面显示正常,再考虑jsp与ftl两种视图共存的问题吧。

4、ftl模板。在WEB-INF/ftl下新建test.ftl

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试</title>
</head>
<body> 姓名:${userName}
<br/>
年龄:${userAge} </body>
</html>

5、后端代码。跳转到test.ftl

 @Controller
public class FreemarkerController { @RequestMapping("/test")
public String sayHello1(ModelMap map){
map.put("userName","小明");
map.put("userAge",23);
return "test";
} }

6、浏览器显示

  备注:Idea和Eclipse为了开发方便,都有ftl的插件,各位有兴趣可以看看。

到此为止,已经成功整合了SpringMVC和Freemarker!

SpringMVC整合freeMarker实现页面静态化+SpringMVC配置多视图的更多相关文章

  1. 页面静态化技术Freemarker技术的介绍及使用实例.

    一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...

  2. SpringBoot2 整合FreeMarker模板,完成页面静态化处理

    本文源码:GitHub·点这里 || GitEE·点这里 一.页面静态化 1.动静态页面 静态页面 即静态网页,指已经装载好内容HTML页面,无需经过请求服务器数据和编译过程,直接加载到客户浏览器上显 ...

  3. Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

    模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...

  4. JavaWeb页面静态化之使用freemarker模板生成一个html静态页面

    题外话:       页面静态化(展示数据从JSP页面变成HTML页面)实现方式-->模板技术   从本质上来讲,模板技术是一个占位符动态替换技术.一个完整的模板技术需要四个元素:①模板语言(使 ...

  5. 二、freemarker.controller半自动静态化+Tomcat虚拟资源映射

    描述:本内容主要是讲2个tomcat之间同时共享一个静态话页面,统一入口是springMVC的一个controller,静态化的更新只需要传false.true.把完成的web项目放入a.b服务器To ...

  6. 【转】使用Freemarker实现网页静态化

    使用Freemarker实现网页静态化 2017年08月20日 20:45:51 阅读数:1981 1.1. 什么是freemarker FreeMarker是一个用Java语言编写的模板引擎,它基于 ...

  7. JAVAEE——宜立方商城10:使用freemarker实现网页静态化、ActiveMq同步生成静态网页、Sso单点登录系统分析

    1. 学习计划 1.使用freemarker实现网页静态化 2.ActiveMq同步生成静态网页 2. 网页静态化 可以使用Freemarker实现网页静态化. 2.1. 什么是freemarker ...

  8. Thymeleaf实现页面静态化

    如果用户所有的请求,都需要Thyleaf渲染后直接返回给用户,后台就存在大量的查询操作,数据库的压力就会骤然上升,请求的时间就会延长,带来极不好用户体验,现在市面上流行的就是页面的静态化处理,下面就来 ...

  9. FreeMarker实现网页静态化

    1.FreeMarker实现网页静态化. FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Servl ...

随机推荐

  1. 4-4 Redis 的常用配置

    2016-12-22 15:30:43 本篇文章属于Redis 系列第四篇文章:Redis 配置文件介绍 该系列文章链接 NoSQL 数据库简介 Redis的安装及及一些杂项基础知识 Redis 的常 ...

  2. 环境搭建 - Tomcat(Windows)

    Tomcat环境搭建 本文以Windows7下搭建tomcat-8.5.15为示例 下载tomcat压缩包 网址:Tomcat 非C盘根目录新建文件夹:Tomcat D:\tomcat 将tomcat ...

  3. ECMASCript 2019可能会有哪些特性?

    最近这些年,ECMASCript标准发展节奏非常稳定,每年都会发布新的特性.那么,ECMASCript 2019可能会有哪些特性呢? ECMASCript语法提案的批准流程 JavaScript的标准 ...

  4. Shell基础命令(一)

    Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个 ...

  5. Dynamics CRM项目实例之六:积分管理,汇总字段,计算字段,快速查看视图

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复137或者20141228可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me!        博文讲述的主要是如 ...

  6. 上海启动5G试用!104页PPT,为你深度解析5G终端的创新和机遇

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源:国泰君安证券 作者:分析师王聪.张阳.陈飞达 导读:2019年是5G元年,各大品牌将陆续推出5G ...

  7. [python爬虫]Requests-BeautifulSoup-Re库方案--robots协议与Requests库实战

    [根据北京理工大学嵩天老师“Python网络爬虫与信息提取”慕课课程编写 慕课链接:https://www.icourse163.org/learn/BIT-1001870001?tid=100223 ...

  8. Android远程桌面助手之性能监测篇

    <Android下获取FPS的几种方法>一文中提到了Gamebench工具,它不仅可以获取FPS,还可以获取CPU及内存占用率等系统状态信息.其局限性也非常明显,切换应用时需要重新选择监控 ...

  9. 使用Linq的泛型功能

    泛型数据访问类: 业务抽象类使用数据访问类: 业务类继承业务抽象类: 使用业务类:

  10. java每日一总结

    一, 1.安装jdk时路径中不能有空格或者中文. 二, 1.进入文件夹:cd+文件夹名称. 2.进入多级文件夹:cd+文件夹1\文件夹2\文件夹3. 3.返回上一级:cd 空格+... 4.返回根路径 ...