<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      「問題解決」java web項目打成jar包運行后工具類無法讀取模板文件的解決方法

      介紹語

      本號主要是Java常用關鍵技術點,通用工具類的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技術分享;datax、kafka、flink等大數據處理框架的技術分享。文章會不斷更新,歡迎碼友關注點贊收藏轉發!

      望各位碼友點擊關注,沖1000粉。后面會錄制一些視頻教程,圖文和視頻結合,比如:圖書介紹網站系統、搶購系統、大數據中臺系統等。技術才是程序猿的最愛,碼友們沖啊

      如果碼友覺得代碼太長,可以從頭到尾快速掃射一遍,了解大概即可。覺得有用后再轉發收藏,以備不時之需。

      正文:

      項目目錄結構如下:

       

      我在開發博客系統的的時候,需要使用工具類FreemarkerUtil獲取ftl模板文件生成html文件, idea本地運行正常,freemarker正常獲取到模板并生成靜態文件,如下圖:

       

      打包成jar包之后在服務器上運行,報如下問題:
      java.io.FileNotFoundException: file:/home/myblog-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/moban does not exist.

       

      百度后大悟,打包成jar包時,不能使用new File()方式獲取jar包中的文件,需要用流的方式獲取。所以修改代碼后,在本地idea運行正常,服務器運行也正常了。

      工具類源碼:
      修改前源代碼:
      這時候傳遞的ftlFile參數為:/moban/help-page.ftl

       package com.javalaoniu.blog.utils;  
         
       import com.javalaoniu.blog.exception.BlogBusinessException;  
       import freemarker.template.Configuration;  
       import freemarker.template.Template;  
       import org.slf4j.Logger;  
       import org.slf4j.LoggerFactory;  
         
       import java.io.File;  
       import java.io.FileWriter;  
       import java.net.URL;  
       import java.util.Map;  
         
       public class FreemarkerUtil {  
         
           private static final Logger LOGGER = LoggerFactory.getLogger(FreemarkerUtil.class);  
         
           /**  
            * 生成靜態html文件  
            *  
            * @param ftlFile  模板文件  
            * @param map      用于模板中的數據  
            * @param htmlFile 輸出的文件  
            */  
           public void genHtml(String ftlFile, String htmlFile, Map map) {  
               LOGGER.info("ftlFile:{}", ftlFile);  
               LOGGER.info("htmlFile:{}", htmlFile);  
               try {  
                   URL resource = this.getClass().getResource(ftlFile);  
                   File mobanFile = new File(resource.getPath());  
                   LOGGER.info("模板文件:{}", mobanFile.getPath());  
         
                   Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);  
                   cfg.setDirectoryForTemplateLoading(new File(mobanFile.getParent()));  
                   cfg.setDefaultEncoding("utf-8");  
                   Template template = cfg.getTemplate(mobanFile.getName());  
         
                   //生成靜態頁面  
                   File outFile = new File(htmlFile);  
                   if (!outFile.exists()) {  
                       // 創建目錄  
                       File dir = new File(outFile.getParent());  
                       dir.mkdirs();  
                   }  
                   if (outFile.exists()&&!outFile.isFile()) {  
                       throw new RuntimeException("輸出文件錯誤,它不是文件");  
                   }  
                   LOGGER.info("outFile.getPath:{}", outFile.getPath());  
                   //String ftlPath = this.getClass().getClassLoader().getResource(ftlFile)  
         
                   FileWriter fw = new FileWriter(outFile);  
                   template.process(map, fw);  
                   LOGGER.info("輸出文件:{}", outFile.getPath());  
               } catch (Exception e) {  
                   LOGGER.error("生成靜態文件異常:", e);  
                   throw new BlogBusinessException("生成靜態文件異常", e);  
               }  
           }  
         
       }

      修改后源代碼:
      這時候傳遞的ftlFile參數為:help-page.ftl

       package com.javalaoniu.blog.utils;  
         
       import com.javalaoniu.blog.exception.BlogBusinessException;  
       import freemarker.cache.ClassTemplateLoader;  
       import freemarker.template.Configuration;  
       import freemarker.template.Template;  
       import org.slf4j.Logger;  
       import org.slf4j.LoggerFactory;  
         
       import java.io.File;  
       import java.io.FileWriter;  
       import java.util.Map;  
         
       public class FreemarkerUtil {  
         
           private static final Logger LOGGER = LoggerFactory.getLogger(FreemarkerUtil.class);  
         
           /**  
            * 生成靜態html文件  
            *  
            * @param ftlFile  模板文件  
            * @param map      用于模板中的數據  
            * @param htmlFile 輸出的文件  
            */  
           public void genHtml(String ftlFile, String htmlFile, Map map) {  
               LOGGER.info("ftlFile:{}", ftlFile);  
               LOGGER.info("htmlFile:{}", htmlFile);  
               try {  
                   LOGGER.info("模板文件:{}", ftlFile);  
         
                   Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);  
                   //cfg.setDirectoryForTemplateLoading(new File(mobanFile.getParent()));// 打成jar后運行獲取到的路徑不對  
                   //cfg.setClassForTemplateLoading(FreemarkerUtil.class, "moban");// 打成jar后運行獲取到的路徑不對  
                   cfg.setTemplateLoader(new ClassTemplateLoader(  
                       this.getClass().getClassLoader(),  "/moban"));  
                   cfg.setDefaultEncoding("utf-8");  
                   Template template = cfg.getTemplate(ftlFile);  
         
                   //生成靜態頁面  
                   File outFile = new File(htmlFile);  
                   if (!outFile.exists()) {  
                       // 創建目錄  
                       File dir = new File(outFile.getParent());  
                       dir.mkdirs();  
                   }  
                   if (outFile.exists()&&!outFile.isFile()) {  
                       throw new RuntimeException("輸出文件錯誤,它不是文件");  
                   }  
                   LOGGER.info("outFile.getPath:{}", outFile.getPath());  
                   //String ftlPath = this.getClass().getClassLoader().getResource(ftlFile)  
         
                   FileWriter fw = new FileWriter(outFile);  
                   template.process(map, fw);  
                   LOGGER.info("輸出文件:{}", outFile.getPath());  
               } catch (Exception e) {  
                   LOGGER.error("生成靜態文件異常:", e);  
                   throw new BlogBusinessException("生成靜態文件異常", e);  
               }  
           }  
         
       }
       ?

      鄙人編碼十年多,在項目中也積累了一些工具類,很多工具類在每個項目都有在用,很實用。大部分是鄙人封裝的,有些工具類是同事封裝的,有些工具類已經不記得是ctrl+c的還是自己封裝的了,現在有空就會總結項目中大部分的工具類,分享給各位碼友。如果文章中涉及的代碼有侵權行為請通知鄙人處理。

      計劃是先把工具類整理出來,正所謂工欲善其事,必先利其器。項目中不管是普通單體項目還是多模塊maven項目或是分布式微服務,一部分功能模塊都是可以重用的,工具類模塊就是其中之一。

      posted @ 2022-09-04 23:28  Java夜未眠  閱讀(347)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲欧洲日产国产av无码| 久久人妻av无码中文专区| 男人和女人做爽爽免费视频 | 国产乱人伦无无码视频试看| 乱老年女人伦免费视频| 人妻饥渴偷公乱中文字幕| 亚洲欧美色综合影院| 久久精品国产99国产精品澳门 | 视频一区二区三区四区不卡| 久久久久人妻一区精品色| 美女胸18下看禁止免费视频| 精品久久久无码中文字幕| 成人精品自拍视频免费看| 国产AV无码专区亚洲AV紧身裤| 亚洲中文字幕人妻系列| 色悠悠在线观看入口一区| 甘德县| 无码国产精品一区二区av| 亚洲最大福利视频网| 国产午夜福利不卡在线观看| 午夜福利一区二区三区在线观看| 精品久久精品午夜精品久久 | 97在线碰| 国产高清精品在线91| 国产av一区二区麻豆熟女| 亚洲成人www| 亚洲精品国产av成人网| 亚洲中文字幕无码专区| 欧美人与动zozo在线播放| 久久精品无码免费不卡 | 五月丁香综合缴情六月小说| 亚洲人成网站在线观看播放不卡| 内射一区二区三区四区| 亚洲欧美偷国产日韩| 久久精品免视看国产成人| 国内精品久久久久影院网站| 9lporm自拍视频区| 亚洲精品无amm毛片| 国产区成人精品视频| 五月婷婷中文字幕| 国产女人喷潮视频在线观看|