还是先贴出该例子存于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>
新闻热点
疑难解答