zoukankan      html  css  js  c++  java
  • SpringMVC整合freeMarker实现页面静态化+SpringMVC配置多视图

    一、背景

      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的依赖

    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、浏览器显示

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

     

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

    在全栈的道路上,积极向上、成熟稳重、谦虚好学、怀着炽热的心向前方的走得更远。
  • 相关阅读:
    Maven导入com.google.common.collect jar包
    poj 2192 Zipper
    poj 3278 Catch That Cow
    poj 2488 A Knight's Journey
    poj 3982 序列
    poj 2109 Power of Cryptography
    poj 3258 3273
    java中大数的一些基本运算
    hdu 1715 大菲波数
    最小生成树模板
  • 原文地址:https://www.cnblogs.com/DDgougou/p/9283219.html
Copyright © 2011-2022 走看看