网站优化之使用Free marker静态化网站文章页

博客做出来的时候就想要把一些栏目和文章页都静态化处理,当时没啥时间搞,就一直没去弄。但是最近的工作就是做网站,用cms快速搭出了几个网站,cms搭建网站是真的方便啊 如果没有需要二次开发实现的功能,那基本不需要写后端代码的。而且做出来的还不错,怪不得看很多博主都是用cms搭建的博客。 我是用的FreeCMS,展示层就有用Free Marker来做。 然后就参考这个cms的源码 把自己博客的文章页静态化了下。

原文连接:ZJBLOG

静态化主要是为了提高网页打开的速度,然后还有利于SEO,更容易被搜索引擎识别收录,而且比较稳定和安全。

free marker静态化原理是用模板+数据模型=输出html网页。

freemarker并不关心数据的来源,只是根据模板的内容,将数据模型在模板中显示并输出文件(通常为html,也可以生成其它格式的文本文件)

首先引入jar包

Free marker的jar包和文档

链接:https://pan.baidu.com/s/1GZNvnOT6wbb2S6646c7cSQ 密码:q0af

maven依赖

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

代码

根据模板文件和数据模型创建html的方法

private void createHtml(String templetPath, String siteInfoPath, HashMap<String, Object> map) throws Exception {
        // ①创建配置对象(创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。)
        Configuration cfg = new Configuration(Configuration.getVersion());// 注意:这里需要传递一个版本

        // ②读取模板文件夹
        cfg.setDirectoryForTemplateLoading(new File(templetPath));// 设置要加载的模板文件的路径,这里的templetPath就是模板的路径webapp/templet/
        // ③设置模板的编码格式
        cfg.setDefaultEncoding("UTF-8");

        // ④获取模板对象
        Template template = cfg.getTemplate("info.html");// info.html是模板名称

        // ⑥将模板和数据模型合并 --> 输出模板,生成文件
        // 静态页面路径
        File htmlFile = new File(siteInfoPath); //siteInfoPath是静态化生成的html存放的路径,webapp/site/info/2019-11-30(文章日期)/文章id.html(根据自己的需要来设置)
        if (!htmlFile.getParentFile().exists()) {
            htmlFile.getParentFile().mkdirs(); //文章不存在则创建
        }
        PrintWriter pw = new PrintWriter(htmlFile);
        template.process(map, pw);// 合并 map:数据模型 pw:输出流对象 map中存的是模板文件中需要的数据文章列表等,在模板文件中用${..}获取,可参考free marker文档
        pw.close();// 关闭流
    }

  

   

静态化文章页的方法

 /**
     * 静态化文章页
     *
     * @param articleId
     * @throws IOException
     */
    @RequestMapping({"/toCrea****"})
    public String toCreate****(HttpServletRequest request, Long articleId) throws Exception {

        LOGGER.info("静态化文章方法开始");

        //查询要静态化的文章信息
        Article article = new Article();
        article.setArticleId(articleId);
        Article articleDetail = articleService.selectByKeyWords(article);
        //文章发布的时间,用于将静态化的文章网页放在对应时间的文件夹中
        String articleTime = Tools.getStrDateTime(articleDetail.getCreationtime(), "yyyy-MM-dd");

        // 给文章添加访问路径(发布一篇文章后静态化该文章,静态化时将该文章的静态化后路径添加至数据库)
        String pageUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + request.getContextPath() + "/site/info" + articleId + ".html";
        articleDetail.setPageUrl(pageUrl);
        articleService.upArticle(articleDetail);

        // 创建数据模型(这里使用map类型) --[数据模型可以是List、Map对象 注意:Map类型的key必须是String类型]
        HashMap<String, Object> map = new HashMap<>();
        map.put("contextPathNo", request.getSession().getServletContext().getContextPath());// 项目名称,用于生成后html页面的静态资源调用css,img等
        // 文章信息
         ......//其他信息代码省略。。。

         map.put("info", articleDetail);
        ......

                //模板所在的路径
        String templetPath = request.getSession().getServletContext().getRealPath("/templet");
        //静态化生成的html路径
        String siteInfoPath = request.getSession().getServletContext()
            .getRealPath("/site/info/" + articleTime + "/" + articleId + ".html");

        createHtml(templetPath, siteInfoPath, map);

        return "success";
    }

  

模板文件info.html(省略了很多代码,仅作为示例)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>${info.articleTitle }</title>
<link href="${contextPathNo}/css/details.css" rel="stylesheet">
<script src="${contextPathNo}/js/jquery-1.7.2.min.js"></script>
</head>
<body>
        <!-- 文章信息 -->
		<h2 class="c_titile" style="font:‘宋体‘, Arial, Helvetica, sans-serif;color: #756F71">${info.articleTitle}</h2>
		<p class="box_c" style="font: 12px ‘宋体‘, Arial, Helvetica, sans-serif;color: #756F71">
	        <span class="d_time">发布时间:${info.creationtime?string(‘yyyy-MM-dd hh:mm‘) }</span>    <!-- ?string将date类型时间转为字符串显示-->

	        <span>编辑:${info.articleAuthor}</span>
	        阅读:<span id=‘ajaxInfoClickSpan‘><img src=‘${contextPathNo}/images/ajax-loader.gif‘/></span><!-- 文章点击量 需要动态展示 -->
	        <input type="hidden" value="${info.articleId?c}" id="articleIdinit"><!-- ?c将long类型文章id正常显示,不加?c会被,分割-->

		</p>
		<ul class="infos">${info.articleDetail }
		</ul>

		<!-- 其他的例如文章列表、判断等 -->

		<#if (info.parent==333)> <a class="n2" href="${contextPathNo}/toSharesss">程序人生</a> </#if>
			<!-- 非空判断 frm没有null-->
                	<#if upArticle??>
			<p>
				上一篇:<a href="${contextPathNo}/toDetail}">${upArticle.articleTitle}</a>
			</p>
			</#if>
			<!-- 遍历列表,if else 。获取长度需要?使用.没用-->
			<ul class="rank">
			<#list newTimeArticleList as newList>
				<#if (newList.articleTitle?length>16)>
					<li><a href="${contextPathNo}/toDetail"
						title="${newList.articleTitle }" target="_blank">${newList.articleTitle?substring(0,16)}...</a></li>
				<#else>
					<li><a href="${contextPathNo}/toDetail"
						title="${newList.articleTitle }" target="_blank">${newList.articleTitle}</a></li>
				</#if>
			</#list>
		</ul>

		<!-- 大概的模板,更多的内容参考文档-->
</body>

</html>

  

这样就能根据模板来生成一个html静态网页了。

需要注意的是,有些动态展示的内容 是不能直接静态化的,比如 文章的点击数和 右侧的最热文章,最新文章,底部的上一篇下一篇等。。。

暂时没有的解决方式 我就用了ajax来加载的。。

?

原文地址:https://www.cnblogs.com/sunonzj/p/11963666.html

时间: 2024-10-11 21:58:42

网站优化之使用Free marker静态化网站文章页的相关文章

java自适应响应式 企业网站源码 SSM freemaker生成静态化 手机 平板 PC springmvc

java 企业网站源码 前后台都有 静态模版引擎, 代码生成器大大提高开发效率 前台: 支持两套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC.平板.手机(三合一)浏览器访问 4.springmvc +spring4.2.5+ mybaits3.3  SSM 普通java we

做网站排名优化企业网站优化的变革摒弃框式化注重价值因素

http://passport.baidu.com/?business&un=%E6%9C%8D%E5%8B%99%E6%89%BE%E4%BD%99%E6%B1%9F%E5%B0%8F%E5%A7%90http://passport.baidu.com/?business&un=%E6%9C%8D%E5%8B%99%E6%89%BE%E5%BD%AD%E6%B3%BD%E5%B0%8F%E5%A7%90http://passport.baidu.com/?business&un=

学习笔记 --- 缓存、动态页面静态化、网站优化

http://www.cnblogs.com/cs_net/archive/2011/03/17/1986620.html 一.缓存 缓存(Cache)技术在软件开发过程中有着广泛的用途, 它对提升软件性能和改善客户体验有很大帮助. 所谓缓存, 是指将那些经常重复的操作结果暂时存放起来, 在以后的执行过程中, 只要使用前面的暂存结果即可. 缓存技术在日常生活中随处可见, 就拿排队买票来说吧: 买票时需要先排队, 等轮到自己了, 再告诉售票员你需要买那里的票, 售票员查询完后告诉你有还是没有. 若

简单网站优化

一.为什么要网站优化 1.1.大型网站的特点 高访问量 同时在线人数多 数据量庞大 数据操作频繁 1.2.网站性能测试指标(用户角度) 日访问量 同时在线人数 最大并发连接数 访问响应时间 1.3.网站性能个体体现 首屏时间:一个网站被浏览器上部,800*600区域充满所需要的时间 网页访问可用性:用户访问网页的成功率. DNS时间:浏览器将地址发送给DNS服务器,DNS服务器根据地址返回IP到浏览器,浏览器得到IP地址,此为DNS时间 建立连接时间:包含DNS时间后,浏览器重到IP地址后,再将

页面静态化----------------------------------------个人笔记

***********************************************大型网站提速关键技术(页面静态化,mmecached,mysql优化)*********************************************************************************** ************************************************************页面静态化*******************

PHP实现HTML页面静态化的方法

随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化. 一般情况下会从以下方面来做优化 动态页面静态化 优化数据库 使用负载均衡 使用缓存 使用CDN加速 现在很多网站在建设的时候都要进行静态化的处理,为什么网站要进行静态化处理呢?我们都知道纯静态网站是所有的网页都是独立的一个html页面,当我们访问的时候不需要经过数据的处理直接就能读取到文件,访问速度就可想而知了,而其对

网站优化不等于搜索引擎优化SEO

对于SEO相信搞网络营销的人基本上都知道这个名词,英文全称为search engine optimization,中文一般叫搜索引擎优化,也有的叫搜索引擎定位(Search Engine Positioning)和搜索引擎排名(Search Engine Ranking),简单来说SEO就是在Baidu,google,yahoo,MSN等等各大搜索引擎中获得比较靠前的自然排名的技巧和策略. 目前,搜索引擎优化已经成为许多企业开展搜索引擎营销的重要手段,而搜索引擎营销已经成为企业网站推广最重要的组

18个网站优化技巧

快速的页面加载对提升搜索引擎排名.网站转化率和整体的用户体验是非常重要的.网站页面的加载速度也是衡量网站性能的一个重要因素. 如果网站不是以最好的性能在运行,迟缓的加载会让你在低的排名和搜索流量上花费更大的代价.页面的加载速度会对用户的行为和转化率产生很大的影响. 那么?有哪些简单的方式可以优化加载速度呢? 1.图片优化 首先,你需要优化你网站上的图片,来获得丝毫加速网站的机会.从原图上移除额外的注解.不必要的空间和无用的颜色,将图片保存为JPEG格式,因为它即使占用空间小,也能保证图片的高质量

网站优化的重点在哪里

网站SEO优化话题就如同爱情电视剧一般,永远有人看,看不腻,因为爱情可以让人充满想象,让人愉悦,seo可以给网站带来流量,获得利益,今天来说说那些动辄五千上万的seo诊断回答了哪些问题? 网站现在底怎么发外链? 外链这个一直seo头痛最大的难题,首页,做好友情链接,刚开始新站,再垃圾的网站都交换,吸引蜘蛛即可.其次,免费的论坛发一些,如天涯,豆瓣,各地方社区等等.再次,可以淘宝购买一些纯手工包收录相关的外链,一般2元一个,辅助作用.最后,就是购买一些新闻站软文,比如新浪,网易,搜狐等等,具体还得