SpringMVC整合freeMarker实现页面静态化+SpringMVC配置多视图

摘要:
--自由标记模板--˃23org。freemarker</groupId>4<artifactId>freemarker>/artifactId>5<version>2.3.23</version>6</dependency>73,springmvc servlet中的配置12345678991011121314151617181920021utf-8220。#############23zh_ CN26true27忽略282930313233˂!在上述配置中设置freemarker的顺序

一、背景

  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整合freeMarker实现页面静态化+SpringMVC配置多视图第2张

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

 

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

1 <!-- freemarker模板 -->
2 <dependency>
3     <groupId>org.freemarker</groupId>
4     <artifactId>freemarker</artifactId>
5     <version>2.3.23</version>
6 </dependency>
7             

3、springmvc-servlet中的配置

 1     <!-- 配置Jsp视图解析器 -->
 2     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 3         <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" />
 4         <property name="prefix" value="/WEB-INF/jsp/" />
 5         <property name="suffix" value=".jsp" />
 6         <property name="order" value="1" />
 7     </bean>
 8 
 9     <!-- 配置freeMarker的模板路径 -->
10     <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
11         <property name="templateLoaderPath" value="/WEB-INF/ftl/" /><!--注意这儿不要添加classpath-->
12         <property name="defaultEncoding" value="utf-8" />
13         <property name="freemarkerVariables">
14             <map>
15                 <entry key="xml_escape" value-ref="fmXmlEscape" />
16             </map>
17         </property>
18         <property name="freemarkerSettings">
19             <props>
20                 <prop key="template_update_delay">0</prop>
21                 <prop key="default_encoding">UTF-8</prop>
22                 <prop key="number_format">0.##########</prop>
23                 <prop key="date_format">yyyy-MM-dd</prop>
24                 <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
25                 <prop key="locale">zh_CN</prop>
26                 <prop key="classic_compatible">true</prop>
27                 <prop key="template_exception_handler">ignore</prop>
28             </props>
29         </property>
30     </bean>
31     <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
32 
33     <!-- 配置freeMarker视图解析器 -->
34     <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
35         <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
36         <property name="contentType" value="text/html;charset=UTF-8"></property>
37         <property name="requestContextAttribute" value="request" />
38         <property name="exposeSpringMacroHelpers" value="true" />
39         <property name="exposeRequestAttributes" value="true" />
40         <property name="exposeSessionAttributes" value="true" />
41         <property name="cache" value="true" />
42         <property name="prefix" value="" />
43         <property name="suffix" value=".ftl" />
44         <property name="order" value="0"/>
45     </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

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>测试</title>
 6 </head>
 7 <body>
 8 
 9     姓名:${userName}
10     <br/>
11     年龄:${userAge}
12 
13 </body>
14 </html>

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

 1 @Controller
 2 public class FreemarkerController {
 3     
 4     @RequestMapping("/test")
 5     public String sayHello1(ModelMap map){
 6         map.put("userName","小明");
 7         map.put("userAge",23);
 8         return "test";
 9     }
10 
11 }

6、浏览器显示

SpringMVC整合freeMarker实现页面静态化+SpringMVC配置多视图第3张

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

 

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

免责声明:文章转载自《SpringMVC整合freeMarker实现页面静态化+SpringMVC配置多视图》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Akka入门实例Linux下输出 excel文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringMVC详解

SpringMVC学习笔记----一、SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包。 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--configure the setting of springmvcDispatcherServlet and c...

FreeMarker模板文件的组成(2)

1.FreeMarker模板文件主要由如下4个部分组成:1.1文本:直接输出的部分1.2注释:<#-- ... -->格式部分,不会输出1.3插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出1.4FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出 2.概要介绍四部分 最简单的模板是...

FreeMarker 在JAVA控制台应用(5)

建立一个普通的java项目:HelloFreeMarker 引入freemarker.jar包 在项目目录下建立模板目录:templates 在templates目录下,建立hello.ftl模板文件,模板内容如下:你好啊,${user},今天你的精神不错! 在src下新建com.kj.study.freemarker包,然后建立Hello.ja...

SpringMVC跳转到html页面以及Controller返回html页面的乱码问题

一、SpringMVC跳转到html页面  1、自定义视图解析器:      public class CustomResourceView extends InternalResourceView {         @Override         public boolean checkResource(Locale locale) throw...

Excel 对应.xml/.ftl 配置(中爆导出范文)

<?xml version="1.0"?><Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:o...

SpringMVC上传视频等大文件

前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践。该博客重在实践。 一. Http协议原理简介 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出...