A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

什么是Freemarker?
    FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
    目前企业中:主要用Freemarker做静态页面或是页面展示
一.工程结构
二.web.xml
[url=][/url]
1 <?xml version="1.0" encoding="UTF-8"?>   2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"   3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   4     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee       5    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   6       7     <display-name>SpringMVC</display-name>   8       9     <context-param>  10         <param-name>contextConfigLocation</param-name>  11         <param-value>/WEB-INF/springMVC-servlet.xml</param-value>  12     </context-param>  13       14     <listener>  15         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  16     </listener>  17       18     <filter>  19         <filter-name>encodingFilter</filter-name>  20         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  21         <init-param>  22             <param-name>encoding</param-name>  23             <param-value>UTF-8</param-value>  24         </init-param>  25         <init-param>  26             <param-name>forceEncoding</param-name>  27             <param-value>true</param-value>  28         </init-param>  29     </filter>  30     <filter-mapping>  31         <filter-name>encodingFilter</filter-name>  32         <url-pattern>/*</url-pattern>  33     </filter-mapping>  34   35     <servlet>  36         <servlet-name>springMVC</servlet-name>  37         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  38         <load-on-startup>1</load-on-startup>  39     </servlet>  40     <servlet-mapping>  41         <servlet-name>springMVC</servlet-name>  42         <url-pattern>/</url-pattern>  43     </servlet-mapping>  44 </web-app>   [url=][/url]


三.springMVC-servlet.xml
[url=][/url]
1 <?xml version="1.0" encoding="UTF-8"?>   2 <beans xmlns="http://www.springframework.org/schema/beans"   3     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"   4     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   5     xsi:schemaLocation="http://www.springframework.org/schema/beans    6                     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   7                     http://www.springframework.org/schema/context   8                     http://www.springframework.org/s ... ing-context-3.0.xsd   9                     http://www.springframework.org/schema/mvc  10                     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  11                     ">  12     <!-- 自动扫描包 -->   13     <context:component-scan base-package="com.bijian.study.controller"></context:component-scan>     14       15     <!-- 默认注解映射支持 -->   16     <mvc:annotation-driven></mvc:annotation-driven>  17       18     <!--JSP视图解析器-->  19     <bean id="viewResolverJsp" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  20         <property name="prefix" value="/WEB-INF/views/"/>  21         <property name="suffix" value=".jsp"/>  22         <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/>  23         <property name="order" value="1"/>  24     </bean>  25       26     <!-- 配置freeMarker视图解析器 -->  27     <bean id="viewResolverFtl" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  28         <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>  29         <property name="contentType" value="text/html; charset=UTF-8"/>  30         <property name="exposeRequestAttributes" value="true" />  31         <property name="exposeSessionAttributes" value="true" />  32         <property name="exposeSpringMacroHelpers" value="true" />  33         <property name="cache" value="true" />  34         <property name="suffix" value=".ftl" />  35         <property name="order" value="0"/>  36     </bean>  37   38     <!-- 配置freeMarker的模板路径 -->  39     <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  40         <property name="templateLoaderPath" value="/WEB-INF/ftl/"/>  41         <property name="freemarkerVariables">  42             <map>  43                 <entry key="xml_escape" value-ref="fmXmlEscape" />  44             </map>  45         </property>  46         <property name="defaultEncoding" value="UTF-8"/>  47         <property name="freemarkerSettings">  48             <props>  49                 <prop key="template_update_delay">3600</prop>  50                 <prop key="locale">zh_CN</prop>  51                 <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>  52                 <prop key="date_format">yyyy-MM-dd</prop>  53                 <prop key="number_format">#.##</prop>  54             </props>  55         </property>  56     </bean>  57   58     <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>  59 </beans>  [url=][/url]

      在JSP和Freemarker的配置项中都有一个order property,上面例子是把freemarker的order设置为0,jsp为1,意思是找view时,先找ftl文件,再找jsp文件做为视图。这样Freemarker视图解析器就能与JSP视图解析器并存。

四.FreeMarkerController.java
[url=][/url]
1 package com.bijian.study.controller;   2    3 import java.util.ArrayList;   4 import java.util.HashMap;   5 import java.util.List;   6 import java.util.Map;   7    8 import javax.servlet.http.HttpServletRequest;   9 import javax.servlet.http.HttpServletResponse;  10   11 import org.springframework.stereotype.Controller;  12 import org.springframework.web.bind.annotation.RequestMapping;  13 import org.springframework.web.servlet.ModelAndView;  14   15 import com.alibaba.fastjson.JSON;  16 import com.bijian.study.utils.JsonUtil;  17 import com.bijian.study.vo.User;  18     19 @Controller   20 public class FreeMarkerController {     21     22     @RequestMapping("/get/usersInfo")     23     public ModelAndView Add(HttpServletRequest request, HttpServletResponse response) {     24     25         User user = new User();     26         user.setUsername("zhangsan");     27         user.setPassword("1234");  28           29         User user2 = new User();     30         user2.setUsername("lisi");     31         user2.setPassword("123");   32           33         List<User> users = new ArrayList<User>();     34         users.add(user);  35         users.add(user2);  36         return new ModelAndView("usersInfo", "users", users);     37     }  38       39     @RequestMapping("/get/allUsers")     40     public ModelAndView test(HttpServletRequest request, HttpServletResponse response) {  41           42         List<User> users = new ArrayList<User>();     43         User u1 = new User();     44         u1.setUsername("王五");  45         u1.setPassword("123");  46         users.add(u1);  47           48         User u2 = new User();     49         u2.setUsername("张三");  50         u2.setPassword("2345");  51         users.add(u2);  52           53         User u3 = new User();     54         u3.setPassword("fgh");     55         u3.setUsername("李四");  56         users.add(u3);     57           58         Map<String, Object> rootMap = new HashMap<String, Object>();  59         rootMap.put("userList", users);  60         Map<String, String> product = new HashMap<String, String>();  61         rootMap.put("lastProduct", product);  62         product.put("url", "http://www.baidu.com");     63         product.put("name", "green hose");  64           65         String result = JSON.toJSONString(rootMap);  66           67         Map<String, Object> resultMap = new HashMap<String, Object>();  68         resultMap = JsonUtil.getMapFromJson(result);  69           70         return new ModelAndView("allUsers", "resultMap", resultMap);     71     }  72 }  [url=][/url]


五.JsonUtil.java
[url=][/url]
1 package com.bijian.study.utils;   2    3 import java.util.Map;   4    5 import com.alibaba.fastjson.JSON;   6    7 public class JsonUtil {   8    9     public static Map<String, Object> getMapFromJson(String jsonString) {  10         if (checkStringIsEmpty(jsonString)) {  11             return null;  12         }  13         return JSON.parseObject(jsonString);  14     }  15       16     /** 17      * 检查字符串是否为空 18      * @param str 19      * @return 20      */  21     private static boolean checkStringIsEmpty(String str) {  22         if (str == null || str.trim().equals("") || str.equalsIgnoreCase("null")) {  23             return true;  24         }  25         return false;  26     }  27 }  [url=][/url]


六.User.java
[url=][/url]
1 ackage com.bijian.study.vo;   2    3 public class User {   4    5     private String username;   6     private String password;   7    8     public String getUsername() {   9         return username;  10     }  11   12     public void setUsername(String username) {  13         this.username = username;  14     }  15   16     public String getPassword() {  17         return password;  18     }  19   20     public void setPassword(String password) {  21         this.password = password;  22     }  23 }  [url=][/url]


七.usersInfo.ftl
[url=][/url]
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">      2 <html>      3 <head>      4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">      5 <title>usersInfo</title>      6 </head>      7 <body>      8 <#list users as user>   9     <div>  10         username : ${user.username},   11         password : ${user.password}  12     </div>  13 </#list>     14 </body>     15 </html>  [url=][/url]


八.allUsers.ftl
[url=][/url]
1 <html>      2  <head>      3    <title>allUsers</title>      4  </head>      5  <body>      6    <#list resultMap.userList as user>      7        Welcome ${user.username}!  id:${user.password}<br/>      8    </#list>      9    <p>Our latest product:     10     <a href="${resultMap.lastProduct.url}">${resultMap.lastProduct.name}  </a>!     11   </body>     12 </html>  [url=][/url]


九.运行效果
再输入http://localhost:8088/SpringMVC/greeting?name=zhangshan,JSP视图解析器运行依然正常。
至此,就结束完成整合了!

2 个回复

倒序浏览
有问题欢迎在评论区留言
回复 使用道具 举报
或者添加学姐微信
DKA-2018
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马