zoukankan      html  css  js  c++  java
  • [Spring MVC]学习笔记--FreeMarker的使用

    还是先贴出该例子存于github上的位置

    https://github.com/lemonbar/spring-mvc-freemarker

    Sping-Framework 的官方文档简单列出了在spring-mvc中如何使用freemarker, 但是相对来说提供的信息和例子太少, 所以在这给出一个详细的例子.

    注:我是在maven基础上进行的构建, 很多解释已经在代码中加了, 所以尽量贴代码.

    FreeMarker Site: http://freemarker.org/

    1. 整个文件夹结构

    src
        main
            java
                com.lemon.spring.controller
                    GreetingController
            webapp
                WEB-INF
                    ftl
                        footer.ftl
                        header.ftl
                        login.ftl
                        welcome.ftl
                    root-context.xml
                    web.xml
    pom.xml

    2. pom.xml内容

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.lemon.spring</groupId>
        <artifactId>spring-mvc-freemarker</artifactId>
        <packaging>war</packaging>
        <version>1.0-SNAPSHOT</version>
        <name>spring-mvc-freemarker Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <properties>
            <spring.framework.version>4.0.6.RELEASE</spring.framework.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.framework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.framework.version}</version>
            </dependency>
            <!--context-support should be included for freemarker bean definition.-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.framework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.20</version>
            </dependency>
        </dependencies>
        <build>
            <finalName>spring-mvc-freemarker</finalName>
        </build>
    </project>

    3. web.xml

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
             version="3.0">
    
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>WEB-INF/root-context.xml</param-value>
        </context-param>
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value></param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    </web-app>

    4. root-context.xml内容

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <context:component-scan base-package="com.lemon.spring"/>
        <!-- 添加注解驱动 -->
        <mvc:annotation-driven enable-matrix-variables="true"/>
        <!--<context:annotation-config/>-->
        <!-- 允许对静态资源文件的访问 -->
        <mvc:default-servlet-handler />
    
        <!--freemarker config-->
        <bean id="freemarkerConfig"
              class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
            <property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
        </bean>
    
        <!--
        View resolvers can also be configured with ResourceBundles or XML files.
        If you need different view resolving based on Locale, you have to use the resource bundle resolver.
        -->
        <bean id="viewResolver"
              class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
            <property name="cache" value="true"/>
            <property name="prefix" value=""/>
            <property name="suffix" value=".ftl"/>
        </bean>
    
    </beans>

    5. GreetingController.java内容

    /* 
     * Copyright (c) 2014 General Electric Company. All rights reserved. 
     * 
     * The copyright to the computer software herein is the property of 
     * General Electric Company. The software may be used and/or copied only 
     * with the written permission of General Electric Company or in accordance 
     * with the terms and conditions stipulated in the agreement/contract 
     * under which the software has been supplied. 
     */
    package com.lemon.spring.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import java.util.Arrays;
    import java.util.List;
    
    @Controller
    public class GreetingController {
    
        @RequestMapping(value = "/greeting/{user}", method = RequestMethod.GET)
        public String greeting(@PathVariable String user, Model model) {
            List<String> userList = Arrays.asList(user.split("-"));
            //userList is the variable name, used in ftl file.
            model.addAttribute("userList", userList);
            return "welcome";
        }
    
        @RequestMapping(value = "/greeting", method = RequestMethod.POST)
        public ModelAndView greeting(@RequestParam("user") String user) {
            List<String> userList = Arrays.asList(user.split("-"));
            ModelAndView result = new ModelAndView("welcome");
            //userList is the variable name, used in ftl file.
            result.addObject("userList", userList);
            return result;
        }
    
        @RequestMapping("/login")
        public String login() {
            return "login";
        }
    }

    6. welcome.ftl

    <html>
    <head>
        <title>Welcome!</title>
    </head>
    <body>
    <#include "./header.ftl"/>
    <table border="1">
        <tr><th>Name</th><th>Price</th></tr>
        <#list userList as user>
            <tr><th>${user}</th><th>1.0</th></tr>
        </#list>
    </table>
    <!--use include to include another ftl file content in this file.-->
    <#include "./footer.ftl"/>
    </body>
    </html>

    7. login.ftl

    <#import "/spring.ftl" as spring/>
    <html>
    <head>
        <title>Please input your names, seperator with '-' char.</title>
    </head>
    <body>
    <#include "./header.ftl"/>
    <form action="greeting" method="POST">
        Names:
        <input type="text" name="user"/><br>
        <input type="submit" value="submit"/>
    </form>
    <!--use include to include another ftl file content in this file.-->
    <#include "./footer.ftl"/>
    </body>
    </html>

    8. footer.ftl

    <hr>
    <i>
        Copyright (c) 2014 <a href="http://www.acmee.com">Acmee
        Inc</a>,
        <br>
        All Rights Reserved.
    </i>

    9. header.ftl

    <h1>
        This is header!
    </h1>
    <hr>
  • 相关阅读:
    Unity 3(一):简介与示例
    MongoDB以Windows Service运行
    动态SQL中变量赋值
    网站发布IIS后堆栈追踪无法获取出错的行号
    GridView Postback后出错Operation is not valid due to the current state of the object.
    Visual Studio 2010 SP1 在线安装后,找到缓存在本地的临时文件以便下次离线安装
    SQL Server 问题之 排序规则(collation)冲突
    IIS 问题集锦
    linux下安装mysql(ubuntu0.16.04.1)
    apt-get update 系列作用
  • 原文地址:https://www.cnblogs.com/lemonbar/p/3912252.html
Copyright © 2011-2022 走看看