JAVA中集成Freemarker生成靜態html


Springboot

1.引入Freemarker jar包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

2.配置application.properties

### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########

3.創建ftl文件

 

 

 

在resource文件下新增文件夾templates,在templates文件夾下存放ftl文件,例如:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>FreeMarker</title>
</head>
<body>
<h1>Simple project</h1>
<h1>${key}</h1>
</body>
</html>

4.新建controller調用方法

    @SuppressWarnings("unchecked")
    @RequestMapping(value="/test",method=RequestMethod.GET)
    public String test(Model model,HttpServletRequest request) {
         model.addAttribute("key","test project");
        return "test";
        
    }

 

 

 

 

 

 

 5.生成html靜態文件

使用工具類:

@Autowired
private Configuration cfg;


  

  /** * @param modeName 模板名稱 * @param targetFileName 生成后的HTML名稱 * @param params 傳入模板的參數 * @Author: zy * @Date: 2020-6-4 09:39:47 * @Description:生成靜態頁面 */ public void createHtmlByMode(String modeName, String targetFileName, Map<String, Object> params) { Writer out = null; // 找到服務器緩存目錄,可以自己指定目錄 String folder = PropertisUtil.getApplicationProperties("healthReport.logs.urls") + targetFileName; // 通過匹配路徑格式拼接完整生成路徑 String outFile = folder; try { File file = new File(outFile); // 生成空HTML文件 if (!file.exists()) { file.createNewFile(); } // 創建模版對象 Template template = cfg.getTemplate(modeName); // 設置輸出流 out = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");// 設置編碼 UTF-8 // 模版數據插入參數,通過輸出流插入到HTML中 template.process(params, out); } catch (Exception e) { e.printStackTrace(); } finally { if (null != out) { try { out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } } }

修改controller中的方法:

    @SuppressWarnings("unchecked")
    @RequestMapping(value="/test",method=RequestMethod.GET)
    public String test(Model model,HttpServletRequest request) {
         model.addAttribute("key","test project");
         //生成靜態文件
         Map param=new HashMap();
         param.put("key", "我是被生成的靜態文件");
         createHtmlByMode("test.ftl","test.html",param);
        return "test";
        
    }

實現效果(我這里默認保存到d:/testlogs):

 

 

 

 Springmvc(和springboot大致相同,此處只留下配置)

1.引入Freemarker jar包

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.25-incubating</version>
        </dependency>

2.springmvc配置

<!-- freemarker -->
    <bean id="freeMarkerConfigurer"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/freemarker/ftl/"></property>
        <property name="defaultEncoding" value="utf-8" />
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">1</prop>
                <prop key="locale">zh_CN</prop>
                <prop key="datetime_format">yyyy-MM-dd</prop><!-- 時間格式化 -->
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="number_format">#.##</prop>
            </props>
        </property>
    </bean>

    <bean id="freeMarkerViewResolver"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="cache" value="true" />
        <property name="prefix" value="" /><!-- 上面已經配了,這里就不用配啦 -->
        <property name="suffix" value=".ftl" />
        <property name="contentType" value="text/html;charset=UTF-8" />
        <property name="allowSessionOverride" value="true" />
        <property name="allowRequestOverride" value="true" />
        <property name="exposeSpringMacroHelpers" value="true" />
        <property name="exposeRequestAttributes" value="true" />
        <property name="exposeSessionAttributes" value="true" />
        <property name="requestContextAttribute" value="request" />
    </bean>

3.調用方式

    /**返回模板信息*/
 @SuppressWarnings("unchecked")
 @RequestMapping(value="/test",method={RequestMethod.GET})
 public ModelAndView test(HttpServletRequest request) {
     ModelAndView mv = new ModelAndView();
     //設置參數
     mv.addObject("key", "測試freemarker");
     //配置模板
     mv.setViewName("test");
     return mv;
 }

分享完畢,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM