1.问题背景

SEO一直是网站对外推广的一个重要手段,如何能够让搜索引擎快速搜索到网站对于增强网站的浏量,提升网站对外形象有着重要意义。那么怎样能够对SEO进行优化呢?一个非常常用的手段就是在网页的关键字部分多增加能够表示本网页的关键字,并且这些关键字在接下来的网页正文中能够多次出现,另外一个重要的方法就是如果在本网页中存在文章链接,最好是每个链接的地址是不一样的,这种不一样不是指同一个链接传的参数不一样,而是每个链接对应的都是一个新的html页面,如果你的页面是jsp那么我们所需要做的就是将将其进行伪静态化。在公司新平台推出之际,查询实现代码发现文章内容的现实都是采用ajax方式展示的,这样导致的问题就是查看网页源码的时候根本查询不到文章内容。基于这个原因我们需要对内容展示部分进行重新实现,也就是将文章内容进行静态化。

2.具体方式

对文章内容进行静态化,所采用的工具是freemarker,通过模板引擎生成jsp页面。首先我们需要一个ftl模板文件,这个文件就是模板引擎生成jsp页面的根据,其内容与html十分相似,只不过是在某些部分通过变量用从后台传过来的数据进行填充,如下面的例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib  prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%String path = request.getContextPath();%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel = "Shortcut Icon" href="<%=path%>/resources/images/favicon.ico" >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="${contentItem.keywords}"/>
<meta name="description" content="${contentItem.explanation}"/>
<link href="<%=path%>/resources/css/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="<%=path%>/resources/js/jquery/jquery.min.js"></script>
<script type="text/javascript" src="<%=path%>/resources/js/jquery/jQuery.md5.js"></script>
<script type="text/javascript" src="<%=path%>/resources/js/common.js"></script>
<script type="text/javascript" src="<%=path%>/resources/js/about.js"></script>
<script charset="utf-8" src="http://wpa.b.qq.com/cgi/wpa.php"></script>
<script type="text/javascript">
</script>
<title>关于我们-普惠理财</title>
</head>
<body>
<!--页头start-->
<jsp:include page="../frame_top.jsp"/>
<!--页头end--><div class="ny_content clearfix"><jsp:include page="leftMenu.html"/>    <!-- <div id="leftMenu"></div> --><div class="ny_maincont fl" style="table-layout:fixed; word-break: break-all;"><div class="position"><h4>${contentItem.title}</h4></div>${contentItem.content}</div></div></div><!--页尾start-->
<jsp:include page="../frame_bottom.jsp"/>
<!--页尾end-->
<jsp:include page="../rightContext.jsp"/>
</body>
</html>

其中的${contentItem.content}就是从后台传入的需要展示的内容,接下来就是java部分:

package com.voiinnov.puhuilicai.freemarker;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;public class FreeMarkerEngine {private static Log logger = LogFactory.getLog(FreeMarkerEngine.class);private Configuration freemarker_cfg = null;/*** 设置关键字,描述,内容并调用* @param fileName                将要生成的jsp页面的名字* @param content          jsp页面的主体内容* @param keywords                 关键字* @param explanation      说明* @param template         生成该jsp所使用的ftl模板的名字* @throws IOException*/public void getAbuoutUsJSP(String template,String fileName,String content,String keywords,String explanation,String sRootDir,String title) throws IOException{ContentItem contentItem = new ContentItem();FreeMarkerEngine fme = new FreeMarkerEngine();/*****设置关键词*******/contentItem.setKeywords(keywords);/*****设置描述*****/contentItem.setExplanation(explanation);/****设置内容****/contentItem.setContent(content);/****设置大标题****/contentItem.setTitle(title);Map root = new HashMap();root.put("contentItem",contentItem);String sGeneFilePathRoot = "/";boolean bOK = fme.geneJSPFile("/" + template, root, sGeneFilePathRoot, fileName,sRootDir);}/*** 生成jsp或html页面* @param templateFileName* @param propMap* @param htmlFilePath    * @param htmlFileName* @param sRootDir   生成的jsp存放的路径* @return* @throws IOException*///private boolean geneJSPFile(String templateFileName,Map propMap ,String jspFilePath,String jspFileName,String sRootDir) throws IOException{public boolean geneJSPFile(String templateFileName,Map propMap ,String jspFilePath,String jspFileName,String sRootDir) throws IOException{try{Template t = getFreeMarkerCFG().getTemplate(templateFileName);File afile = new File(sRootDir + "/" + jspFilePath + "/" + jspFileName);Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile)));t.process(propMap, out);}catch(TemplateException e){return false;}return true;}/*** 读取ftl模板文件* @return*/private Configuration getFreeMarkerCFG(){if(null == freemarker_cfg){freemarker_cfg = new Configuration();freemarker_cfg.setClassForTemplateLoading(this.getClass(), "/resources/ftl");}return freemarker_cfg;}
}

整个执行过程也十分的简单,模板引擎通过读取模板文件确定要生成页面的格式,然后通过将变量的值填充到新文件的对应部分,实现动态的读取数据库中的内容,然后将页面静态化,将新生成的页面元原ajax方式填充的页面相比,你会发现虽然两种页面在展示效果上来看没有任何区别,但是查看源代码ajax的内容部分是空白的,但是静态化后的文件内容部分是真是存在的,而且这个页面会成为一个独立链接的链接源,并不是通常采用的同一个链接通过传递不同的参数显示不同的内容。这种方式是十分有利于SEO的。

FreeMarker静态化文件解决SEO推广问题相关推荐

  1. Freemarker生成静态化文件

    页面 test1.ftl <!DOCTYPE html> <html> <head><meta charset="utf-8">&l ...

  2. Freemarker静态化页面的使用

    Freemarker 是一种基于模板的,用来生成输出文本的通用工具,所以我们必须要定制符合自己业务的模板,然后生成自己的文本(html页面,string字符串,xml文本等等).Freemarker是 ...

  3. Freemarker静态化ActiveMQ实现

    Freemarker 实现商品页面静态化 ActiveMQ 使用topic模式,添加商品时 监听到消息,根据商品id 从数据库中查询商品信息,生成静态页面 注意 不从redis中获取商品信息 添加商品 ...

  4. Joomla网站实现页面静态化(利于SEO)

    joomla网站搭建完成,上传服务器,域名可以访问之后,接下来面临的问题就是网站SEO优化,以及百度抓取,排名等等. 所以需要把动态的网站通过Apache重写rewrite的方式,实现(伪)静态页面输 ...

  5. 关于freemarker静态化,生成html页面乱码的问题(亲测有效)

    freemarker生成html页面的时候出现了中文乱码的问题 在网上也查了下大致给了以下几种解决方案 首先是说ftl文件的head标签,加上 <meta http-equiv="Co ...

  6. 织梦 tags.php静态化,dedecms网站tag标签全部静态化的解决方法

    更改tags.php文件在根目录 找到$tag = FilterSearch(urldecode($tag)); 替换为:$tag = urldecode($tag); 更改文件arc.taglist ...

  7. Freemarker基于模板字符串生成静态化html文件

    基于字符串生成静态化文件,就不会通过模板文件.ftl了,也就是项目中压根就不存在模板文件,就是通过用户输入或在配置文件中定义一些模板字符串,基于这些字符串来生成静态化文件. 将字符串转换成模板:

  8. 网页静态化技术Freemarker

    网页静态化技术Freemarker 一.Freemarker的基本介绍 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道 ...

  9. 网页静态化技术Freemarker简单Demo

    为什么要用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 随着用户访问量以及数据量的增大,网页静态化技术方案如今越来越流行. 什么是网 ...

最新文章

  1. AutoML未来可期,工程师的明天何去何从?
  2. CPU深夜狂飙,一帮大佬都傻眼了...
  3. 重磅丨AI公共政策成全球热点,美国ITI发布《人工智能政策原则》
  4. 基于linux服务器的性能分析与优化
  5. mongodb更新数据,查找相同的id,有重复的,就更新。
  6. 【Codeforces717F】Heroes of Making Magic III 线段树 + 找规律
  7. OS / Linux / SIGCHLD 信号
  8. 高段位产品经理必须掌握的商业模式分析该怎么做?
  9. MVC中Controller弹出提示框
  10. GNOME下也是Alt+F2,输入gnome-terminal
  11. 债券估值-零息债券、附息债券和永久债券
  12. 强连通分量 Kosaraju科萨拉朱算法
  13. Python 把月销售目标按天数分解成日销售目标
  14. 服务器管理系统推荐,十大Windows服务器工具 系统管理员必备
  15. 创建RAID磁盘列表(Raid5和Raid10)
  16. 小程序使用云开发,拍照获取银行卡卡号
  17. 5 python数据分析基础——批量进行数据分析(一)
  18. 我在帝都买房后,又开始思考怎样赚更多的钱了。
  19. 我们可以用TeamViewer免费版做什么?
  20. 清北学堂培训2019.4.29

热门文章

  1. 360云盘不给力,只能上限200M,还是新浪微盘给力
  2. PHP语言生成二维码
  3. Ubuntu系统指令含义(含英文原词及翻译)
  4. 微信与QQ发公告:本月不能修改个人资料
  5. NAT和端口映射的区别!!!
  6. 一夜爆火的《羊了个羊》,开发竟这么简单!
  7. autohotkey快捷键创建桌面记事本
  8. 机器学习:用于恶意软件检测和分类的朴素贝叶斯规则
  9. [读史思考] 田单火牛阵是真实的吗?
  10. 如何下载廊坊市卫星地图高清版大图