• <ul id="k6mek"><pre id="k6mek"></pre></ul>
      <ul id="k6mek"></ul>
      <ul id="k6mek"></ul>
    • <blockquote id="k6mek"><fieldset id="k6mek"></fieldset></blockquote>
    • <samp id="k6mek"><tbody id="k6mek"></tbody></samp><ul id="k6mek"><tbody id="k6mek"></tbody></ul>
      <th id="k6mek"></th>
    • <samp id="k6mek"></samp>
    • 網(wǎng)站優(yōu)化之使用Free marker靜態(tài)化網(wǎng)站文章頁

      博客做出來的時(shí)分就想要把一些欄目和文章頁都靜態(tài)化處理,當(dāng)時(shí)沒啥時(shí)刻搞,就一向沒去弄??墒亲罱墓ぷ骶褪亲鼍W(wǎng)站,用cms快速搭出了幾個(gè)網(wǎng)站,cms建立網(wǎng)站是真的便利啊 假如沒有需要二次開發(fā)實(shí)現(xiàn)的功能,那基本不需要寫后端代碼的。并且做出來的還不錯(cuò),怪不得看很多博主都是用cms建立的博客。 我是用的FreeCMS,展示層就有用Free Marker來做。 然后就參閱這個(gè)cms的源碼 把自己博客的文章頁靜態(tài)化了下。

       原文連接:杭州網(wǎng)站建設(shè)

      靜態(tài)化主要是為了提高網(wǎng)頁打開的速度,然后還有利于SEO,更容易被搜索引擎識(shí)別收錄,而且比較穩(wěn)定和安全。

      free marker靜態(tài)化原理是用模板+數(shù)據(jù)模型=輸出html網(wǎng)頁。

      freemarker并不關(guān)心數(shù)據(jù)的來源,只是根據(jù)模板的內(nèi)容,將數(shù)據(jù)模型在模板中顯示并輸出文件(通常為html,也可以生成其它格式的文本文件)

      首先引入jar包

      Free marker的jar包和文檔

      maven依賴

      org.freemarker
      freemarker
      2.3.23

      代碼

      根據(jù)模板文件和數(shù)據(jù)模型創(chuàng)建html的方法

      private void createHtml(String templetPath, String siteInfoPath, HashMap map) throws Exception {
      // ①創(chuàng)建配置對(duì)象(創(chuàng)建一個(gè)Configuration對(duì)象,直接new一個(gè)對(duì)象。構(gòu)造方法的參數(shù)就是freemarker對(duì)于的版本號(hào)。)
      Configuration cfg = new Configuration(Configuration.getVersion());// 注意:這里需要傳遞一個(gè)版本
      // ②讀取模板文件夾
      cfg.setDirectoryForTemplateLoading(new File(templetPath));// 設(shè)置要加載的模板文件的路徑,這里的templetPath就是模板的路徑webapp/templet/
      // ③設(shè)置模板的編碼格式 cfg.setDefaultEncoding("UTF-8"); // ④獲取模板對(duì)象
      File htmlFile = new File(siteInfoPath); //siteInfoPath是靜態(tài)化生成的html存放的路徑,webapp/site/info/2019-11-30(文章日期)/文章id.html(根據(jù)自己的需要來設(shè)置)
      Template template = cfg.getTemplate("info.html");// info.html是模板名稱 // ⑥將模板和數(shù)據(jù)模型合并 --> 輸出模板,生成文件 // 靜態(tài)頁面路徑
      PrintWriter pw = new PrintWriter(htmlFile);
      if (!htmlFile.getParentFile().exists()) { htmlFile.getParentFile().mkdirs(); //文章不存在則創(chuàng)建 }
      template.process(map, pw);// 合并 map:數(shù)據(jù)模型 pw:輸出流對(duì)象 map中存的是模板文件中需要的數(shù)據(jù)文章列表等,在模板文件中用${..}獲取,可參考free marker文檔 pw.close();// 關(guān)閉流
      }


         

      靜態(tài)化文章頁的方法

      /**
      * 靜態(tài)化文章頁
      *
      * @param articleId
      * @throws IOException
      @RequestMapping({"/toCrea****"})
      */
      public String toCreate****(HttpServletRequest request, Long articleId) throws Exception {
      LOGGER.info("靜態(tài)化文章方法開始"); //查詢要靜態(tài)化的文章信息
      Article articleDetail = articleService.selectByKeyWords(article);
      Article article = new Article(); article.setArticleId(articleId);
      String articleTime = Tools.getStrDateTime(articleDetail.getCreationtime(), "yyyy-MM-dd");
      //文章發(fā)布的時(shí)間,用于將靜態(tài)化的文章網(wǎng)頁放在對(duì)應(yīng)時(shí)間的文件夾中 // 給文章添加訪問路徑(發(fā)布一篇文章后靜態(tài)化該文章,靜態(tài)化時(shí)將該文章的靜態(tài)化后路徑添加至數(shù)據(jù)庫(kù))
      + request.getContextPath() + "/site/info" + articleId + ".html";
      String pageUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() articleDetail.setPageUrl(pageUrl); articleService.upArticle(articleDetail);
      HashMap map = new HashMap<>();
      // 創(chuàng)建數(shù)據(jù)模型(這里使用map類型) --[數(shù)據(jù)模型可以是List、Map對(duì)象 注意:Map類型的key必須是String類型]
      map.put("contextPathNo", request.getSession().getServletContext().getContextPath());// 項(xiàng)目名稱,用于生成后html頁面的靜態(tài)資源調(diào)用css,img等
      // 文章信息 ......//其他信息代碼省略。。。 map.put("info", articleDetail); ......
      //靜態(tài)化生成的html路徑
      //模板所在的路徑 String templetPath = request.getSession().getServletContext().getRealPath("/templet");
      .getRealPath("/site/info/" + articleTime + "/" + articleId + ".html");
      String siteInfoPath = request.getSession().getServletContext() createHtml(templetPath, siteInfoPath, map); return "success";
      }


      模板文件info.html(省略了很多代碼,僅作為示例)

      ${info.articleTitle}

      發(fā)布時(shí)間:${info.creationtime?string('yyyy-MM-dd hh:mm') } 編輯:${info.articleAuthor} 閱讀:

        ${info.articleDetail }
      <#if (info.parent==333)> 程序人生 <#if upArticle??>

      上一篇:${upArticle.articleTitle}

        <#list newTimeArticleList as newList> <#if (newList.articleTitle?length>16)>
      • ${newList.articleTitle?substring(0,16)}...
      • <#else>
      • ${newList.articleTitle}

      這樣就能根據(jù)模板來生成一個(gè)html靜態(tài)網(wǎng)頁了。

      需要注意的是,有些動(dòng)態(tài)展示的內(nèi)容 是不能直接靜態(tài)化的,比如 文章的點(diǎn)擊數(shù)和 右側(cè)的最熱文章,最新文章,底部的上一篇下一篇等。。。

      暫時(shí)沒有的解決方式 我就用了ajax來加載的。。


      返回觀點(diǎn)列表
      本文標(biāo)簽:

      相關(guān)專題

      • 品牌官網(wǎng)設(shè)計(jì)
        品牌官網(wǎng)設(shè)計(jì)

        杭州派迪科技為高端客戶提供品牌官網(wǎng)咨詢策劃,品牌官網(wǎng)設(shè)計(jì),品牌官網(wǎng)建設(shè)開發(fā)服務(wù),以國(guó)際化視野和標(biāo)準(zhǔn)為基礎(chǔ),為各行業(yè)領(lǐng)軍品牌提供高端企業(yè)網(wǎng)站定制、策劃、設(shè)計(jì)、互動(dòng)與制作

        查看詳情
      • 大策略營(yíng)銷門戶網(wǎng)站
        大策略營(yíng)銷門戶網(wǎng)站

        杭州派迪科技有自己的營(yíng)銷型網(wǎng)站CMS系統(tǒng),適合白帽SEO網(wǎng)站。特別對(duì)大策略的營(yíng)銷型門戶網(wǎng)站制作有一定的經(jīng)驗(yàn),曾經(jīng)為上海天擎外貿(mào)行業(yè)網(wǎng)站、浙江兆龍營(yíng)銷型門戶、先臨三維門戶營(yíng)銷網(wǎng)站提供全程的技術(shù)支持及SEO優(yōu)化指導(dǎo)

        查看詳情
      • 集團(tuán)/上市公司網(wǎng)站
        集團(tuán)/上市公司網(wǎng)站

        杭州派迪科技為杭州本地集團(tuán)公司提供網(wǎng)頁設(shè)計(jì)、制作、開發(fā)服務(wù),為集團(tuán)公司網(wǎng)站建設(shè)提供了響應(yīng)式、營(yíng)銷型、品牌型、門戶型網(wǎng)站建設(shè)需求,歡迎廣大集團(tuán)公司客戶咨詢

        查看詳情
      • 外貿(mào)網(wǎng)站建設(shè)
        外貿(mào)網(wǎng)站建設(shè)

        杭州派迪科技為高端客戶提供外貿(mào)網(wǎng)站咨詢策劃,外貿(mào)官網(wǎng)設(shè)計(jì),外貿(mào)官網(wǎng)建設(shè)開發(fā)服務(wù),以谷歌搜索引起算法為基礎(chǔ),為各行業(yè)外貿(mào)公司提供高端企業(yè)外貿(mào)網(wǎng)站定制、策劃、設(shè)計(jì)、互動(dòng)與制作

        查看詳情
      • 企業(yè)網(wǎng)站建設(shè)
        企業(yè)網(wǎng)站建設(shè)

        高端專業(yè)、令人印象深刻的用戶界面、易于訪問——企業(yè)網(wǎng)站必須反映一切,因?yàn)榕傻峡萍荚谶@里提供幫助,憑借精湛的技術(shù)、豐富的經(jīng)驗(yàn)、與客戶的持續(xù)溝通以及對(duì)每一個(gè)細(xì)節(jié)的關(guān)注,我們確保在快速的周期時(shí)間內(nèi)提供優(yōu)質(zhì)的服務(wù)。

        查看詳情
      • 半定制網(wǎng)站
        半定制網(wǎng)站

        杭州派迪科技模板網(wǎng)站建設(shè)專題_各行業(yè)方案專題欄目提供各行業(yè)產(chǎn)品適合的網(wǎng)站建設(shè)方案,幫助企業(yè)了解派迪科技建站效果等信息,您可以通過本站了解各行業(yè)網(wǎng)站建設(shè)方案,如需要獲取本行業(yè)定制網(wǎng)站建設(shè)方案,可以聯(lián)系在線客服或撥打電話咨詢

        查看詳情

      體驗(yàn)從溝通開始,讓我們聆聽您的需求!

      開始您的數(shù)字化品牌體驗(yàn)! 0571-85815193 期待您的來電!

      [ 網(wǎng)站建設(shè)×品牌官網(wǎng)設(shè)計(jì)×大策略營(yíng)銷門戶×微信小程序開發(fā)×微信公眾號(hào)開發(fā)]

      網(wǎng)站事業(yè)部產(chǎn)品經(jīng)理

      網(wǎng)站事業(yè)部產(chǎn)品經(jīng)理

      免費(fèi)獲取項(xiàng)目策劃

      項(xiàng)目開發(fā)部產(chǎn)品經(jīng)理

      項(xiàng)目開發(fā)部產(chǎn)品經(jīng)理

      免費(fèi)獲取項(xiàng)目策劃

      我們正使用 cookies 來改善您的訪問體驗(yàn)

      派迪科技非常重視您的個(gè)人隱私,當(dāng)您訪問我們的網(wǎng)站www.bmwdream.cn時(shí),請(qǐng)同意使用所有cookies 。

      如果您想詳細(xì)了解我們?nèi)绾问褂胏ookies請(qǐng)?jiān)L問我們的 《隱私政策》

      Cookie 偏好

      如果您想詳細(xì)了解我們?nèi)绾问褂胏ookie請(qǐng)?jiān)L問我們的 《隱私政策》

      管理cookie偏好

      基本 cookies

      始終允許

      這些 cookies 是網(wǎng)站運(yùn)行所必需的,不能在我們的系統(tǒng)中關(guān)閉。它們通常僅針對(duì)您所做的相當(dāng)于服務(wù)請(qǐng)求的操作而設(shè)置,例如設(shè)置您的隱私首選項(xiàng)、登錄或填寫表格。您可以將瀏覽器設(shè)置為阻止或提醒您有關(guān)這些 cookies 的信息,但網(wǎng)站的某些部分將無法運(yùn)行。這些 cookies 不存儲(chǔ)任何個(gè)人身份信息。

      性能 cookies

      始終允許
      這些 cookies 使我們能夠計(jì)算訪問量和流量來源,以便我們可以衡量和改進(jìn)我們網(wǎng)站的性能。它們幫助我們了解哪些頁面受歡迎和不受歡迎,并了解訪問者如何在網(wǎng)站上移動(dòng)。這些 cookies 收集的所有信息都是匯總的,而且是匿名的。如果您不允許這些 cookies,我們將不知道您何時(shí)訪問了我們的網(wǎng)站,也無法監(jiān)控其性能。

      功能性 cookies

      這些 cookies 收集信息用于分析和個(gè)性化您的定向廣告體驗(yàn)。您可以使用此撥動(dòng)開關(guān)來行使選擇不獲取個(gè)人信息的權(quán)利。如果您選擇關(guān)閉,我們將無法向您提供個(gè)性化廣告,也不會(huì)將您的個(gè)人信息交給任何第三方。

      定位 Cookies

      這些 cookies 可能由我們的廣告合作伙伴通過我們的網(wǎng)站設(shè)置。這些公司可能會(huì)使用它們來建立您的興趣檔案,并在其他網(wǎng)站上向您展示相關(guān)廣告。它們不直接存儲(chǔ)個(gè)人信息,而是基于唯一標(biāo)識(shí)您的瀏覽器和互聯(lián)網(wǎng)設(shè)備。如果您不允許使用這些 cookie,您將體驗(yàn)到較少針對(duì)性的廣告。
      • <ul id="k6mek"><pre id="k6mek"></pre></ul>
        <ul id="k6mek"></ul>
        <ul id="k6mek"></ul>
      • <blockquote id="k6mek"><fieldset id="k6mek"></fieldset></blockquote>
      • <samp id="k6mek"><tbody id="k6mek"></tbody></samp><ul id="k6mek"><tbody id="k6mek"></tbody></ul>
        <th id="k6mek"></th>
      • <samp id="k6mek"></samp>