[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>

 

你可能感兴趣的:(freemarker)