Java语言SpringMvc整合FreeMarker静态页面生成

说明:FreeMarker是静态页面生成框架,本文章主要写了两个案例且都是基于SpringMvc框架。一个是生成伪静态,一个是生成静态页面。只写具体功能,不做太多解释,代码是干货,想多深入自己慢慢研究。

准备工作:现在pom.xml文件中引入FreeMarker包

<!--freemarker-->
<dependency>
  <groupId>org.freemarker</groupId>
  <artifactId>freemarker-gae</artifactId>
  <version>2.3.20</version>
</dependency>

一,伪静态

这是之前Springmvc的视图配置。

<!-- 定义跳转的文件的前后缀 ,视图模式配置-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
   <property name="prefix" value="/WEB-INF/jsps/" />
   <property name="suffix" value=".jsp" />
   <property name="order" value="1"/>
</bean>

在原有的基础上增加FreeMarker的视图配置。

<!-- FreeMarker模板路径 -->
<bean id="freemarkerConfig"
     class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
   <property name="templateLoaderPath">
      <value>/WEB-INF/freemarker</value>
   </property>
   <property name="freemarkerVariables">
      <map>
         <entry key="xml_escape" value-ref="fmXmlEscape" />
      </map>
   </property>
   <property name="defaultEncoding">
      <value>utf-8</value>
   </property>
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />

<!-- 配置freeMarker视图解析器 -->
<bean
      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="suffix" value=".ftl" />
   <property name="order" value="0" />
</bean>

之前是返回视图的时候直接返回/WEB-INF/jsp

配置完成后会根据order的value等级返回查找,我们配置的是优先返回order=0的视图,也就是freemarker的视图。

freemarker.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>freemarker Test</title>
</head>
<body>
<h1>Hello,${root.w}</h1>
<br>
${root.w}
</body>
</html>

我们在FreeMarkerController中写一个返回freemarker视图的方法就OK了

@RequestMapping("freemarkerFirstPage")
public String firstPage(Model model){
    String w="Welcome FreeMarker!";
    Map root = new HashMap();
    root.put("w",w);
    model.addAttribute("root",root);
    return "freemarker";
}

这样freemarker的伪静态就完成了,功能类似于java的jsp.

二,生成静态页面

在D盘下创建db文件夹

在FreeMarkerController中加入下面代码就Ok了

@RequestMapping("twoHtmlPage")
@ResponseBody
public String twoHtmlPage(Model model,HttpServletRequest req){
    String w="Welcome FreeMarker!";
    Map root = new HashMap();
    root.put("w",w);

    String realPath=req.getServletContext().getRealPath("/WEB-INF/freemarker");
    System.out.println(realPath);

    Configuration config=new Configuration();
    try {
        config.setDirectoryForTemplateLoading(new File(realPath));
        config.setObjectWrapper(new DefaultObjectWrapper());
        Template template=config.getTemplate("/freemarker.ftl","GBK");
        FileOutputStream fos = new FileOutputStream("D:\\db\\freemarker.html");
        Writer out = new OutputStreamWriter(fos,"GBK");
        template.process(root, out);
        out.flush();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (TemplateException e) {
        e.printStackTrace();
    }
    return "OK";
}

代码访问完成后,去D/db文件夹下看看是否生成静态页面,如果生成就Ok了









猜你喜欢

转载自blog.csdn.net/liqingwei168/article/details/79651674