首页 > 代码库 > [Spring MVC]学习笔记--FreeMarker的使用

[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.xmlpom.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;@Controllerpublic 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>