zoukankan      html  css  js  c++  java
  • springmvc整合freemarker教程(转)

    1、介绍

    我最近喜欢freemarker在网上找了大半天、都没有找到一个简单又容易理解的案例。虽然只是一个模板技术、但是相对刚开始什么都不知道的,很难入手。下面是自学(其实是谷歌和百度的东找西补)、写了个小案例,入门的。喜欢的可以看看、不喜欢的可以微笑微笑

                         开发工具:idea

                         项目构建:maven

                         开发语言:java

                         整合框架:SpringMVC

                         技术简介:freemarker模板

                         GitHub代码下载:点击下载

    1.1、freemarker手册的介绍freemarker

    1.2、项目模块结构截图

    2、整合案例

    2.1、添加依赖

    1.  
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2.  
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    3.  
      <parent>
    4.  
      <artifactId>SSM-MVC</artifactId>
    5.  
      <groupId>org.ssm.com</groupId>
    6.  
      <version>1.0-SNAPSHOT</version>
    7.  
      </parent>
    8.  
      <modelVersion>4.0.0</modelVersion>
    9.  
      <artifactId>springmvc</artifactId>
    10.  
      <packaging>war</packaging>
    11.  
      <name>springmvc Maven Webapp</name>
    12.  
      <url>http://maven.apache.org</url>
    13.  
       
    14.  
       
    15.  
      <properties>
    16.  
      <!-- maven依赖-->
    17.  
      <junit.version>3.8.1</junit.version>
    18.  
      <jstl.version>1.2</jstl.version>
    19.  
      <servlet-api.version>2.5</servlet-api.version>
    20.  
      <javax.servlet-apiversion>3.1.0</javax.servlet-apiversion>
    21.  
      <javaee-api.version>7.0</javaee-api.version>
    22.  
      <jsp-api.version>2.2</jsp-api.version>
    23.  
      <!--下面这两个是springAOP需要用到-->
    24.  
      <aspectjweaver.version>1.7.2</aspectjweaver.version>
    25.  
      <persistence-api.version>1.0.2</persistence-api.version>
    26.  
      <!-- springmvc -->
    27.  
      <spring.version>4.3.4.RELEASE</spring.version>
    28.  
      </properties>
    29.  
       
    30.  
      <dependencies>
    31.  
       
    32.  
      <!-- 1)junit -->
    33.  
      <dependency>
    34.  
      <groupId>junit</groupId>
    35.  
      <artifactId>junit</artifactId>
    36.  
      <version>${junit.version}</version>
    37.  
      <scope>test</scope>
    38.  
      </dependency>
    39.  
      <!-- 2)jstl -->
    40.  
      <dependency>
    41.  
      <groupId>jstl</groupId>
    42.  
      <artifactId>jstl</artifactId>
    43.  
      <version>${jstl.version}</version>
    44.  
      </dependency>
    45.  
      <dependency>
    46.  
      <groupId>javax.servlet</groupId>
    47.  
      <artifactId>javax.servlet-api</artifactId>
    48.  
      <version>${javax.servlet-apiversion}</version>
    49.  
      <scope>provided</scope>
    50.  
      </dependency>
    51.  
      <dependency>
    52.  
      <groupId>javax.servlet</groupId>
    53.  
      <artifactId>servlet-api</artifactId>
    54.  
      <version>${servlet-api.version}</version>
    55.  
      <scope>provided</scope>
    56.  
      </dependency>
    57.  
      <!-- java ee jar 包 -->
    58.  
      <dependency>
    59.  
      <groupId>javax</groupId>
    60.  
      <artifactId>javaee-api</artifactId>
    61.  
      <version>${javaee-api.version}</version>
    62.  
      <scope>provided</scope>
    63.  
      </dependency>
    64.  
      <dependency>
    65.  
      <groupId>javax.servlet.jsp</groupId>
    66.  
      <artifactId>jsp-api</artifactId>
    67.  
      <version>${jsp-api.version}</version>
    68.  
      <scope>provided</scope>
    69.  
      </dependency>
    70.  
       
    71.  
      <dependency>
    72.  
      <groupId>org.codehaus.jackson</groupId>
    73.  
      <artifactId>jackson-mapper-asl</artifactId>
    74.  
      <version>1.9.8</version>
    75.  
      <type>jar</type>
    76.  
      <scope>compile</scope>
    77.  
      </dependency>
    78.  
       
    79.  
      <!-- 4)springmvc -->
    80.  
      <dependency>
    81.  
      <groupId>org.springframework</groupId>
    82.  
      <artifactId>spring-context</artifactId>
    83.  
      <version>${spring.version}</version>
    84.  
      </dependency>
    85.  
      <!-- springmvc-webmvc -->
    86.  
      <dependency>
    87.  
      <groupId>org.springframework</groupId>
    88.  
      <artifactId>spring-webmvc</artifactId>
    89.  
      <version>${spring.version}</version>
    90.  
      </dependency>
    91.  
      <!-- springmvc-orm-->
    92.  
      <dependency>
    93.  
      <groupId>org.springframework</groupId>
    94.  
      <artifactId>spring-orm</artifactId>
    95.  
      <version>${spring.version}</version>
    96.  
      </dependency>
    97.  
      <dependency>
    98.  
      <groupId>org.springframework</groupId>
    99.  
      <artifactId>spring-test</artifactId>
    100.  
      <version>${spring.version}</version>
    101.  
      </dependency>
    102.  
      <dependency>
    103.  
      <groupId>org.springframework</groupId>
    104.  
      <artifactId>spring-aspects</artifactId>
    105.  
      <version>${spring.version}</version>
    106.  
      </dependency>
    107.  
      <!--下面两个提供对 AspectJ 的支持,是 springmvc-aspects 所需要依赖的-->
    108.  
      <dependency>
    109.  
      <groupId>org.aspectj</groupId>
    110.  
      <artifactId>aspectjweaver</artifactId>
    111.  
      <version>${aspectjweaver.version}</version>
    112.  
      </dependency>
    113.  
       
    114.  
      <dependency>
    115.  
      <groupId>javax.persistence</groupId>
    116.  
      <artifactId>persistence-api</artifactId>
    117.  
      <version>${persistence-api.version}</version>
    118.  
      </dependency>
    119.  
       
    120.  
      <!--这个一定要有、不用报错-->
    121.  
      <dependency>
    122.  
      <groupId>org.springframework</groupId>
    123.  
      <artifactId>spring-context-support</artifactId>
    124.  
      <version>3.2.4.RELEASE</version>
    125.  
      </dependency>
    126.  
      <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
    127.  
      <dependency>
    128.  
      <groupId>org.freemarker</groupId>
    129.  
      <artifactId>freemarker</artifactId>
    130.  
      <version>2.3.25-incubating</version>
    131.  
      </dependency>
    132.  
       
    133.  
       
    134.  
      </dependencies>
    135.  
       
    136.  
      <build>
    137.  
      <finalName>springmvc</finalName>
    138.  
       
    139.  
      <!-- 配置插件 -->
    140.  
      <plugins>
    141.  
      <plugin>
    142.  
      <groupId>org.apache.tomcat.maven</groupId>
    143.  
      <artifactId>tomcat7-maven-plugin</artifactId>
    144.  
      <configuration>
    145.  
      <port>8080</port>
    146.  
      <path>/</path>
    147.  
      </configuration>
    148.  
      </plugin>
    149.  
      </plugins>
    150.  
      <resources>
    151.  
      <!--表示把java目录下的有关xml文件,properties文件编译/打包的时候放在resource目录下-->
    152.  
      <resource>
    153.  
      <directory>${basedir}/src/main/java</directory>
    154.  
      <includes>
    155.  
      <include>**/*.config</include>
    156.  
      <include>**/*.xml</include>
    157.  
      </includes>
    158.  
      </resource>
    159.  
      <resource>
    160.  
      <directory>${basedir}/src/main/resources</directory>
    161.  
      </resource>
    162.  
      </resources>
    163.  
       
    164.  
       
    165.  
       
    166.  
      </build>
    167.  
      </project>
     
    问题截图:这是没有添加spring-context-support依赖的时候


    2.2、web.xml配置、其实是springmvc的配置没变

    1.  
      <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    2.  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3.  
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    4.  
      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_0.xsd"
    5.  
      version="3.1">
    6.  
       
    7.  
      <display-name>Archetype Created Web Application</display-name>
    8.  
      <welcome-file-list>
    9.  
      <welcome-file>default.jsp</welcome-file>
    10.  
      <welcome-file>index.jsp</welcome-file>
    11.  
      </welcome-file-list>
    12.  
       
    13.  
       
    14.  
       
    15.  
      <!-- Spring MVC servlet -->
    16.  
      <servlet>
    17.  
      <servlet-name>dispatcherServlet</servlet-name>
    18.  
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    19.  
      <init-param>
    20.  
      <param-name>contextConfigLocation</param-name>
    21.  
      <param-value>classpath*:spring/application-*.xml</param-value>
    22.  
      </init-param>
    23.  
      </servlet>
    24.  
      <servlet-mapping>
    25.  
      <servlet-name>dispatcherServlet</servlet-name>
    26.  
      <url-pattern>/</url-pattern>
    27.  
      </servlet-mapping>
    28.  
       
    29.  
       
    30.  
       
    31.  
       
    32.  
      <!-- 编码过滤器 -->
    33.  
      <filter>
    34.  
      <filter-name>encodingFilter</filter-name>
    35.  
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    36.  
      <async-supported>true</async-supported>
    37.  
      <init-param>
    38.  
      <param-name>encoding</param-name>
    39.  
      <param-value>UTF-8</param-value>
    40.  
      </init-param>
    41.  
      </filter>
    42.  
      <filter-mapping>
    43.  
      <filter-name>encodingFilter</filter-name>
    44.  
      <url-pattern>/*</url-pattern>
    45.  
      </filter-mapping>
    46.  
       
    47.  
       
    48.  
      </web-app>
    49.  
       
    50.  
       
    51.  
       

     

    2.3、application-springmvc.xml配置(多了freemarker的配置)

    1.  
      <?xml version="1.0" encoding="UTF-8"?>
    2.  
      <beans xmlns="http://www.springframework.org/schema/beans"
    3.  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4.  
      xmlns:tx="http://www.springframework.org/schema/tx"
    5.  
      xmlns:mvc="http://www.springframework.org/schema/mvc"
    6.  
      xmlns:context="http://www.springframework.org/schema/context"
    7.  
      xsi:schemaLocation="http://www.springframework.org/schema/beans
    8.  
      http://www.springframework.org/schema/beans/spring-beans.xsd
    9.  
      http://www.springframework.org/schema/tx
    10.  
      http://www.springframework.org/schema/tx/spring-tx.xsd
    11.  
      http://www.springframework.org/schema/context
    12.  
      http://www.springframework.org/schema/context/spring-context.xsd
    13.  
      http://www.springframework.org/schema/mvc
    14.  
      http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    15.  
       
    16.  
       
    17.  
      <!--指明 controller 所在包,并扫描其中的注解-->
    18.  
      <context:component-scan base-package="com.springmvc"/>
    19.  
       
    20.  
       
    21.  
      <!-- 静态资源(js、image等)的访问 -->
    22.  
      <!--<mvc:default-servlet-handler/>-->
    23.  
       
    24.  
      <!-- 启用spring mvc 注解 -->
    25.  
      <mvc:annotation-driven />
    26.  
       
    27.  
       
    28.  
      <!-- 配置freeMarker的模板路径 -->
    29.  
      <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    30.  
      <property name="templateLoaderPath" value="WEB-INF/ftl/" />
    31.  
      <property name="defaultEncoding" value="UTF-8" />
    32.  
      </bean>
    33.  
      <!-- freemarker视图解析器 -->
    34.  
      <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    35.  
      <property name="suffix" value=".ftl" />
    36.  
      <property name="contentType" value="text/html;charset=UTF-8" />
    37.  
      <!-- 此变量值为pageContext.request, 页面使用方法:rc.contextPath -->
    38.  
      <property name="requestContextAttribute" value="rc" />
    39.  
      </bean>
    40.  
       
    41.  
      <!--ViewResolver 视图解析器-->
    42.  
      <!--用于支持Servlet、JSP视图解析-->
    43.  
      <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    44.  
      <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    45.  
      <property name="prefix" value="/WEB-INF/jsp/"/>
    46.  
      <property name="suffix" value=".jsp"/>
    47.  
      </bean>
    48.  
       
    49.  
      </beans>

    2.4、定义模板(其实也是一个页面、后者不一样、ftl)

    1.  
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    2.  
      <html>
    3.  
      <head>
    4.  
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    5.  
      <title>Insert title here</title>
    6.  
      </head>
    7.  
      <body>
    8.  
      Hello ${name}
    9.  
      </body>
    10.  
      </html>
     

    2.5、springmvc入门案例(页面、其实就是想两个模板来回切换)

    1.  
      <%@ page language="java" contentType="text/html; charset=UTF-8"
    2.  
      pageEncoding="UTF-8"%>
    3.  
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    4.  
      <html>
    5.  
      <head>
    6.  
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    7.  
      <title>Insert title here</title>
    8.  
      </head>
    9.  
      <body>
    10.  
       
    11.  
      <h1>第一个参数:${message1 }</h1>
    12.  
      <h1>第二个参数:${message2}</h1>
    13.  
      </body>
    14.  
      </html>


    2.6、Controller

    1.  
      package com.springmvc.freemarker;
    2.  
       
    3.  
      import org.springframework.stereotype.Controller;
    4.  
      import org.springframework.web.bind.annotation.RequestMapping;
    5.  
      import org.springframework.web.bind.annotation.RequestMethod;
    6.  
      import org.springframework.web.servlet.ModelAndView;
    7.  
       
    8.  
      import javax.servlet.http.HttpServletRequest;
    9.  
       
    10.  
      /**
    11.  
      * @auther 陈郑游
    12.  
      * @create 2016/12/29 0029
    13.  
      * @功能
    14.  
      * @问题
    15.  
      * @说明
    16.  
      * @URL地址
    17.  
      * @进度描述
    18.  
      */
    19.  
      @Controller
    20.  
      public class FreemarkerAndJsp {
    21.  
       
    22.  
      /**Freemarker模板的Controller*/
    23.  
      @RequestMapping(value="/welcome",method={RequestMethod.GET})
    24.  
      public ModelAndView getFirstPage(HttpServletRequest request) {
    25.  
      //welcom就是视图的名称(welcom.ftl)
    26.  
      ModelAndView mv = new ModelAndView("welcome");
    27.  
      mv.addObject("name", "My First Spring Mvc and Freemarker !");
    28.  
      return mv;
    29.  
      }
    30.  
       
    31.  
       
    32.  
      /**jsp模板的Controller*/
    33.  
      @RequestMapping(value="/jsp",method={RequestMethod.GET})
    34.  
      public ModelAndView getJsp(HttpServletRequest request) {
    35.  
       
    36.  
      ModelAndView mv = new ModelAndView("index");
    37.  
      mv.addObject("message1", "切换到jsp模板、");
    38.  
      mv.addObject("message2", "My First Spring Mvc");
    39.  
      mv.setViewName("hello/index");
    40.  
      return mv;
    41.  
      }
    42.  
      }

    2.7、效果图

     


    3、freemarker的数据类型


    3.1、直接指定值

        直接指定值可以是字符串、数值、布尔值、集合及Map对象。
    1. 字符串
        直接指定字符串值使用单引号或双引号限定。字符串中可以使用转义字符”"。如果字符串内有大量的特殊字符,则可以在引号     的前面加上一个字母r,则字符串内的所有字符都将直接输出。


    2. 数值
        数值可以直接输入,不需要引号。FreeMarker不支持科学计数法。


    3. 布尔值 
        直接使用true或false,不使用引号。


    4. 集合
        集合用中括号包括,集合元素之间用逗号分隔。
        使用数字范围也可以表示一个数字集合,如1..5等同于集合[1, 2, 3, 4, 5];同样也可以用5..1来表示[5, 4, 3, 2, 1]。


    5. Map对象
        Map对象使用花括号包括,Map中的key-value对之间用冒号分隔,多组key-value对之间用逗号分隔。
        注意:Map对象的key和value都是表达式,但key必须是字符串。


    6. 时间对象
        root.put("date1", new Date());
        ${date1?string("yyyy-MM-dd HH:mm:ss")}


    7. JAVABEAN的处理
        Freemarker中对于javabean的处理跟EL表达式一致,类型可自动转化!非常方便!
     
     

    3.2、输出变量值

    FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是Map对象的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性。


    1. 顶层变量
        所谓顶层变量就是直接放在数据模型中的值。输出时直接用${variableName}即可。


    2. 输出集合元素
        可 以根据集合元素的索引来输出集合元素,索引用中括号包括。如: 输出[“1”, “2”, “3”]这个名为number的集合,可以用              ${number[0]}来输出第一个数字。FreeMarker还支持用number[1..2]来表示原 集合的子集合[“2”, “3”]。


    3. 输出Map元素
        对于JavaBean实例,FreeMarker一样把它看作属性为key,属性值为value的Map对象。
        输出Map对象时,可以使用点语法或中括号语法,如下面的几种写法的效果是一样的:
                 book.author.name                                                                                                                         
                 book.author["name"]                                                                                                                      
                 book["author"].name                                                                                                                      
                 book["author"]["name"]                                                                                                           
     
    使用点语法时,变量名字有和顶层变量一样的限制,但中括号语法没有任何限制。
     

    3.3字符串操作

    1. 字符串连接
        字符串连接有两种语法:
            (1)使用${..}或#{..}在字符串常量内插入表达式的值;
            (2)直接使用连接运算符“+”连接字符串。
            如,下面两种写法等效:
                  ${"Hello, ${user}"}                                                                                                                
                  ${"Hello, " + user + "!"}        
                                                                                                     
    有一点需要注意: ${..}只能用于文本部分作为插值输出,而不能用于比较等其他用途,如:
                  <#if ${isBig}>Wow!</#if>                                                                                                                
                  <#if "${isBig}">Wow!</#if>                                                                                                              
    应该写成:
                  <#if isBig>Wow!</#if>                                                                                                                     


    2. 截取子串
        截取子串可以根据字符串的索引来进行,如果指定一个索引值,则取得字符串该索引处的字符;如果指定两个索引值,则截取两     个索引中间的字符串子串。如:
                  <#assign number="01234">
                  ${number[0]} <#-- 输出字符0 -->
                  ${number[0..3]} <#-- 输出子串“0123” -->


    3.4、集合连接操作

        连接集合的运算符为“+”


    3.5、Map连接操作

        Map连接操作的运算符为“+”


    3.6、算术运算符

        FreeMarker表达式中支持“+”、“-”、“*”、“/”、“%”运算符。


    3.7、比较运算符

    表达式中支持的比较运算符有如下几种:
        1. =(或者==): 判断两个值是否相等;
        2. !=: 判断两个值是否不相等;
        注: =和!=可以用作字符串、数值和日期的比较,但两边的数据类型必须相同。而且FreeMarker的比较是精确比较,不会忽略大小写及空格。
        3. >(或者gt): 大于
        4. >=(或者gte): 大于等于
        5. <(或者lt): 小于
        6. <=(或者lte): 小于等于
        注: 上面这些比较运算符可以用于数字和日期,但不能用于字符串。大部分时候,使用gt比>有更好的效果,因为FreeMarker会把>解释成标签的结束字符。可以使用括号来避免这种情况,如:<#if (x>y)>。

    if else 语句测试:
    <#if num0 gt 18>  <#--不是使用>,大部分时候,freemarker会把>解释成标签结束! -->
    及格!
    <#else>
    不及格!
    </#if>
    root.put("num0", 18);


    3.8、逻辑运算符

    1. &&: 逻辑与;
    2. ||: 逻辑或;
    3. !: 逻辑非
    逻辑运算符只能用于布尔值。
     
     
     
     
     
     
     
     
  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯VIP基础练习 矩形面积交
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    核心思想:想清楚自己创业的目的(如果你没有自信提供一种更好的产品或服务,那就别做了,比如IM 电商 搜索)
    在Linux中如何利用backtrace信息解决问题
  • 原文地址:https://www.cnblogs.com/pingxin/p/p00075.html
Copyright © 2011-2022 走看看