• Spring MVC整合FreeMarker


    什么是Freemarker?
        FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
        目前企业中:主要用Freemarker做静态页面或是页面展示

    一.工程结构

    二.web.xml

     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>   

    三.springMVC-servlet.xml

     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/schema/context/spring-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>  

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

       

    四.FreeMarkerController.java

     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 }  

    五.JsonUtil.java

     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 }  

     六.User.java

     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 }  

    七.usersInfo.ftl

     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>  

    八.allUsers.ftl

     1 <html>     
     2  <head>     
     3    <title>allUsers</title>     
     4  </head>     
     5  <body>     
     6    <#list resultMap.userList as user>     
     7        Welcome ${user.username}!&nbsp;&nbsp;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>  

    九.运行效果

     

     再输入http://localhost:8088/SpringMVC/greeting?name=zhangshan,JSP视图解析器运行依然正常。

    至此,就结束完成整合了!

  • 相关阅读:
    微服务,你得知道这些!(核心组件底层原理Eureka,Feign,Ribbon,Hystrix,Zuul)
    SpringBoot中使用线程池
    字符编码的来源以及历史
    linux设置定时任务以及使用的方法
    第一次搭建成功nginx的配置文件留作纪念(nginx.conf文件)
    接口幂等性适用场景及设计方法
    linux下安装nginx与配置
    怎么将多个项目放进一个工作集中!!!
    原生Ajax请求步骤
    JSP与Servlet的区别、联系
  • 原文地址:https://www.cnblogs.com/zhaosq/p/11252028.html
Copyright © 2020-2023  润新知