SpringMVC与Freemark整合,多视图完美展示详细完美解决
2015-09-25 10:25
537 查看
在霍金与他的伙伴出的新书中<大设计>有这么一个故事:
最近换了份工作,这边的开发环境是2个java,一个UI设计,一个安卓开发,后期听说还会有陆续找UE。在新项目中,由于人员少,发现项目的架构太乱,于是按照自己的经验整合了一遍,在SpringMVC与Freemark整合的时候,老是莫名其妙的出现问题,本质原因不是配置文件的问题,不是代码书写的问题,不是自己不理解的问题,终究是jar包版本以及和jar的问题,在此说下我的出问题在于:
实际应该是:
而我犯得错误是:
接下来说下在Spring+SpringMVC的项目中如何整合Freemarl,本文适合具备SpringMVC的基础的人观看,不然是看的不大明白的。
先整合好Spring+SpringMVC的项目,再次不在叙说。
整合好之后再导入freemark的jar,我用的maven项目,pom依赖如下:
接下来在spring-mvc.xml中整合freemark:
重点说下如下配置文件:
1.
这段配置是配置一些常用的freemark的设置项,我在相应的位置配置的内容如下:
2.
freemarkerSetting:设置项应用
templateLoaderPath:模板文件所在的位置
freemarkerVariables:设置一些全局变量 例如我设置了<entry key="me" value="wo" /> 则可以在页面中${me] 获取到这个值
3.
视图解析器:
1.suffix 后缀名为.ftl的文件
2.requestContextAttribute 在页面中可以使用request这个对象 如:${request.contextPath} 就可以获取到项目路径
*重点说下<property name="order" value="0" />
这段熟悉设置代表了在多视图的情况下,优先匹配的顺序。
测试:
controller:
view视图
1.jsp
2.ftl
2个文件在同一目录下/WEB-INF/jsp/ 目录下,会优先找ftl文件,若没有则在找jsp页面,完毕!
金鱼生活在盛满水的圆形缸体中,金鱼看到的外部世界是扭曲的图景。它获得的真实世界的图景也许和我们的不同,但我们如何知道我们的图景就是正确的呢? 我们很可能处在一个巨大的金鱼缸中。真实世界的图景不是唯一的,金鱼眼中看到的,和人类眼中看到的,同样有效。
最近换了份工作,这边的开发环境是2个java,一个UI设计,一个安卓开发,后期听说还会有陆续找UE。在新项目中,由于人员少,发现项目的架构太乱,于是按照自己的经验整合了一遍,在SpringMVC与Freemark整合的时候,老是莫名其妙的出现问题,本质原因不是配置文件的问题,不是代码书写的问题,不是自己不理解的问题,终究是jar包版本以及和jar的问题,在此说下我的出问题在于:
实际应该是:
<!-- freemark --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freemark-version}</version> </dependency>
而我犯得错误是:
<!-- freemark --> <dependency> <groupId>freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freemark-version}</version> </dependency>
接下来说下在Spring+SpringMVC的项目中如何整合Freemarl,本文适合具备SpringMVC的基础的人观看,不然是看的不大明白的。
先整合好Spring+SpringMVC的项目,再次不在叙说。
整合好之后再导入freemark的jar,我用的maven项目,pom依赖如下:
<!-- 版本定义 --> <properties> <spring-version>4.2.1.RELEASE</spring-version> <freemark-version>2.3.20</freemark-version> </properties>
<!-- freemark --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freemark-version}</version> </dependency>
接下来在spring-mvc.xml中整合freemark:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.lgy.controller" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /> </context:component-scan> <mvc:annotation-driven /> <!-- 静态资源映射 --> <mvc:resources mapping="/static/**" location="/WEB-INF/static/" /> <!-- 设置freeMarker的配置文件路径 --> <bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="location" value="classpath:config/freemark/freemarker.properties" /> </bean> <!-- 配置freeMarker的模板路径 --> <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" /> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="freemarkerSettings" ref="freemarkerConfiguration" /> <property name="templateLoaderPath" value="/WEB-INF/jsp/" /> <property name="freemarkerVariables"> <map> <!-- 设置一些常用全局变量 --> <entry key="xml_escape" value-ref="fmXmlEscape" /> </map> </property> </bean> <!-- 配置freeMarker视图解析器 --> <bean id="viewResolverFtl" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="contentType" value="text/html; charset=utf-8" /> <property name="cache" value="true" /> <property name="suffix" value=".ftl" /> <property name="exposeRequestAttributes" value="true" /> <property name="exposeSessionAttributes" value="true" /> <property name="exposeSpringMacroHelpers" value="true" /> <property name="requestContextAttribute" value="request" /> <property name="order" value="0" /> </bean> <!--通用视图解析器 --> <bean id="viewResolverCommon" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" /> <property name="order" value="1" /> </bean> </beans>
重点说下如下配置文件:
1.
<!-- 设置freeMarker的配置文件路径 --> <bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="location" value="classpath:config/freemark/freemarker.properties" /> </bean>
这段配置是配置一些常用的freemark的设置项,我在相应的位置配置的内容如下:
template_update_delay=0 default_encoding=utf-8 number_format=0.########## datetime_format=yyyy-MM-dd HH:mm:ss classic_compatible=true template_exception_handler=ignore
2.
<!-- 配置freeMarker的模板路径 --> <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" /> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="freemarkerSettings" ref="freemarkerConfiguration" /> <property name="templateLoaderPath" value="/WEB-INF/jsp/" /> <property name="freemarkerVariables"> <map> <!-- 设置一些常用全局变量 --> <entry key="xml_escape" value-ref="fmXmlEscape" /> </map> </property> </bean>说明:
freemarkerSetting:设置项应用
templateLoaderPath:模板文件所在的位置
freemarkerVariables:设置一些全局变量 例如我设置了<entry key="me" value="wo" /> 则可以在页面中${me] 获取到这个值
3.
<!-- 配置freeMarker视图解析器 --> <bean id="viewResolverFtl" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="contentType" value="text/html; charset=utf-8" /> <property name="cache" value="true" /> <property name="suffix" value=".ftl" /> <property name="exposeRequestAttributes" value="true" /> <property name="exposeSessionAttributes" value="true" /> <property name="exposeSpringMacroHelpers" value="true" /> <property name="requestContextAttribute" value="request" /> <property name="order" value="0" /> </bean>
视图解析器:
1.suffix 后缀名为.ftl的文件
2.requestContextAttribute 在页面中可以使用request这个对象 如:${request.contextPath} 就可以获取到项目路径
*重点说下<property name="order" value="0" />
这段熟悉设置代表了在多视图的情况下,优先匹配的顺序。
测试:
controller:
@Controller @RequestMapping("/freemark") public class FreeMarkController { @RequestMapping("/toJsp") public String testToJsp(HttpServletRequest request) { request.setAttribute("username", "feng"); return "test"; } }
view视图
1.jsp
<%@ page language="java" pageEncoding="utf-8" isELIgnored="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>jsp页面</title> </head> <body> 这是一个jsp页面 </body> </html>
2.ftl
<#assign base="sss" /> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>freemark页面</title> </head> <body> 哈哈···${username} ${request.contextPath} ${xml_escape} ${me} </body> </html>
2个文件在同一目录下/WEB-INF/jsp/ 目录下,会优先找ftl文件,若没有则在找jsp页面,完毕!
相关文章推荐
- java SOF
- struts2 异常处理 404错误
- ConcurrentHashMap实现解析
- java OOM
- Java基础知识强化79:Math类概述与成员方法
- java查找最大相同子串
- JAVA基础学习day15--集合二 TreeSet和泛型
- path,classPath,java_home
- 一段java代码的一些思索
- 设计模式之外观模式Facade(结构型)
- 【springmvc+mybatis项目实战】杰信商贸-26.出货表修饰+下载
- eclipse下安装和使用svn版本控制[详细图解]
- ubuntu java 环境配置
- Eclipse 打开出现Failed to create the java Virtual Machine解决
- 马士兵_JAVA自学之路
- Spring+Quartz实现定时器(转载)
- properties--eclipse插件
- JPA一对多单向关联
- Java——实现对密码进行MD5加密
- Java基础知识强化78:正则表达式之获取功能(案例)