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. !: 逻辑非
    逻辑运算符只能用于布尔值。
     
     
     
     
     
     
     
     
  • 相关阅读:
    将Oracle数据库设置为归档模式 & Oracle 9i启动归档
    修改用户家目录
    使用Pam_Tally2锁定和解锁SSH失败的登录尝试
    linux系统用户锁定与解锁
    Linux用户密码过期 FAILED to authorize user with PAM (Authentication token is no longer valid; new one req)
    普通用户通过sudo su
    两台服务器配置互信
    red hat官方的rhel操作系统版本号与内核版本号的对应关系
    linux修改IP地址
    Docker学习(12) Dockerfile构建过程
  • 原文地址:https://www.cnblogs.com/pingxin/p/p00075.html
Copyright © 2011-2022 走看看