[Spring MVC]学习笔记--FreeMarker的使用
还是先贴出该例子存于github上的位置
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>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。