Java SSM 整合 freemarker

来源:互联网 发布:c语言入门经典程序 编辑:程序博客网 时间:2024/05/19 00:43


原文转载自:http://www.jb51.NET/article/43200.htm



前言:FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
簡而言之,Freemarker就是在Jave Web開發中以模板的方式在頁面展示從服務端獲取的信息。

Java: FreeMarker的配置和使用

初学什么都不可以忽略的地方就是这个东西的官方网站:http://freemarker.org/。下载或者API都可以参考这里。

FreeMarker是什么

非常的简单明了。FreeMarker是一个java包。实现了MVC模式,分离开发者和设计师。也就是分离html也java的代码。

 

FreeMarker是如何工作的

这是官网的图。非常明确的说明了FreeMarker是如何运作的。首先需要有一个template模板,在那里就是一堆的html标签和一些专属FreeMarker的标签,这些标签之后会被具体的数据代替。这些数据就是有左下的Java objects提供。<FreeMarker>就是工程中的Jar包。他把这些模板和java objects的数据加工组合之后输出html页面。所以,FreeMarker的功能,就如官网中一直强调的,不是别的而是一个模板引擎。


1.引入jar包

Maven 代码

<!-- 添加 Freemarker 支持--><dependency>    <groupId>org.freemarker</groupId>    <artifactId>freemarker</artifactId>    <version>2.3.20</version></dependency><!-- 添加支持 热部署 --><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-context-support</artifactId>    <version>3.2.4.RELEASE</version></dependency>
2. 添加配置信息:

在src/main/resources/ 目录下 新建Freemarker属性文件 freemarker.properties,里面添加下面的配置信息:

##设置标签类型 两种:[] 和 <> 。[] 这种标记解析要快些tag_syntax=auto_detect\##如果变量为null,转化为空字符串,比如做比较的时候按照空字符做比较classic_compatible=true##去掉多余的空格whitespace_stripping=true##模版更新时间,这里配置是1秒更新一次,正式环境,模版不会改变,可以将这个值设很大,提高效率.#template_update_delay=3600template_update_delay=1##国际化设置,这里设置为中国locale=zh_CN##默认编码utf8default_encoding=utf-8##url编码utf8url_escaping_charset=utf-8##显示日期格式date_format=yyyy-MM-dd##显示时间格式time_format=HH:mm:Ss##显示日期和时间格式datetime_format=yyyy-MM-dd HH:mm:ss##数字显示格式hi.number_format=\#0.\#\#\#\#\###设置输出的字符集编码output_encoding=UTF-8

3.在spring-servlet.xml中添加Freemarker所需的配置,代码如下:

<!-- 第一中配置freeMarker视图解析器 方式,将配置信息写在 freemarker.properties 中 -->    <!-- 设置freeMarker的配置文件路径 -->    <bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">        <property name="location" value="classpath:freemarker.properties"/>    </bean>    <!-- 配置freeMarker的模板路径 -->    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">        <property name="freemarkerSettings" ref="freemarkerConfiguration"/>        <property name="templateLoaderPath">            <value>/WEB-INF/views/</value>        </property>        <property name="freemarkerVariables">            <map>                <entry key="xml_escape" value-ref="fmXmlEscape" />            </map>        </property>    </bean>    <!-- 配置freeMarker视图解析器 -->    <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>        <property name="contentType" value="text/html; charset=utf-8"/>        <property name="cache" value="false"/>        <property name = "suffix" value = ".ftl"></property>        <property name="exposeRequestAttributes" value="true" />        <property name="exposeSessionAttributes" value="true" />        <property name="exposeSpringMacroHelpers" value="true" />        <property name="order" value="0"/>    </bean>    <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />    <!-- 第二种配置freeMarker视图解析器 方式,直接将配置文件写在 spring-mvc.xml 中 -->    <!--<bean id="viewResolverFtl" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>        <property name="contentType" value="text/html; charset=UTF-8"/>        <property name="exposeRequestAttributes" value="true" />        <property name="exposeSessionAttributes" value="true" />        <property name="exposeSpringMacroHelpers" value="true" />        <property name="cache" value="true" />        <property name="suffix" value=".ftl" />        <property name="order" value="0"/>    </bean>    <!– 配置freeMarker的模板路径 –>    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">        <property name="templateLoaderPath" value="/WEB-INF/views/"/>        <property name="freemarkerVariables">            <map>                <entry key="xml_escape" value-ref="fmXmlEscape" />            </map>        </property>        <property name="defaultEncoding" value="UTF-8"/>        <property name="freemarkerSettings">            <props>                <prop key="template_update_delay">3600</prop>                <prop key="locale">zh_CN</prop>                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>                <prop key="date_format">yyyy-MM-dd</prop>                <prop key="number_format">#.##</prop>            </props>        </property>    </bean>    <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>-->

4. 编写controller文件和 .ftl文件


在整合SSM三大框架时设置扫描的对应controller 类中新增访问方法:

@RequestMapping("/helloWorld")    public String helloWorld(Model model) {        String word0 = "Hello ";        String word1 = "World!";        //将数据添加到视图容器中        model.addAttribute("title","ftl模板页面");        model.addAttribute("word0",word0);        model.addAttribute("word1",word1);        return "helloWorld";    }

在 WEB-INF 下的 views 文件夹中,没有就创建一个(如果名字不同,在spring-mvc.xml 配置文件对应的文件夹名称也要更改),新建一个 helloWorld.ftl 文件,里面添加如下代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    <title>${title}</title></head><body><h2>${word0}${word1}</h2></body></html>

5.调试运行

所有的配置好后,就可以启动项目,访问  helloWorld.do (格式:IP:端口/项目名称/helloWorld) 进行测试