热门关键字:
jquery > jquery教程 > java > Spring MVC整合FreeMarker

Spring MVC整合FreeMarker

312
作者:管理员
发布时间:2020/4/10 15:53:46
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=1266

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

一.工程结构

Spring MVC整合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> 

 

九.运行效果

 Spring MVC整合FreeMarker

Spring MVC整合FreeMarker

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

Spring MVC整合FreeMarker

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





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:Spring MVC整合
友荐云推荐