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>
  • 相关阅读:
    快读
    状态压缩-动态规划
    数论入门_扩展欧几里得算法
    luogu P3383线性筛素数(埃氏筛)
    luogu P1843奶牛晒衣服
    git 常用方法
    javascript 数组排序
    深入理解javascript函数参数
    深入理解call apply bind方法
    移动H5前端性能优化
  • 原文地址:https://www.cnblogs.com/lemonbar/p/3912252.html
Copyright © 2011-2022 走看看