1.问题背景

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

2.详细方式

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

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  3. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  5. <%String path = request.getContextPath();%>
  6. <html xmlns="http://www.w3.org/1999/xhtml">
  7. <head>
  8. <link rel = "Shortcut Icon" href="<%=path%>/resources/images/favicon.ico" >
  9. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  10. <meta name="keywords" content="${contentItem.keywords}"/>
  11. <meta name="description" content="${contentItem.explanation}"/>
  12. <link href="<%=path%>/resources/css/style.css" rel="stylesheet" type="text/css" />
  13. <script type="text/javascript" src="<%=path%>/resources/js/jquery/jquery.min.js"></script>
  14. <script type="text/javascript" src="<%=path%>/resources/js/jquery/jQuery.md5.js"></script>
  15. <script type="text/javascript" src="<%=path%>/resources/js/common.js"></script>
  16. <script type="text/javascript" src="<%=path%>/resources/js/about.js"></script>
  17. <script charset="utf-8" src="http://wpa.b.qq.com/cgi/wpa.php"></script>
  18. <script type="text/javascript">
  19. </script>
  20. <title>关于我们-普惠理財</title>
  21. </head>
  22. <body>
  23. <!--页头start-->
  24. <jsp:include page="../frame_top.jsp"/>
  25. <!--页头end-->
  26.  
  27. <div class="ny_content clearfix">
  28.  
  29. <jsp:include page="leftMenu.html"/>
  30. <!-- <div id="leftMenu"></div> -->
  31.  
  32. <div class="ny_maincont fl" style="table-layout:fixed; word-break: break-all;">
  33. <div class="position"><h4>${contentItem.title}</h4></div>
  34.  
  35. ${contentItem.content}
  36.  
  37. </div>
  38.  
  39. </div>
  40.  
  41. </div>
  42.  
  43. <!--页尾start-->
  44. <jsp:include page="../frame_bottom.jsp"/>
  45. <!--页尾end-->
  46. <jsp:include page="../rightContext.jsp"/>
  47. </body>
  48. </html>

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

  1. package com.voiinnov.puhuilicai.freemarker;
  2.  
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.OutputStreamWriter;
  8. import java.io.Writer;
  9. import java.text.SimpleDateFormat;
  10. import java.util.Date;
  11. import java.util.HashMap;
  12. import java.util.List;
  13. import java.util.Map;
  14.  
  15. import org.apache.commons.logging.Log;
  16. import org.apache.commons.logging.LogFactory;
  17.  
  18. import freemarker.template.Configuration;
  19. import freemarker.template.Template;
  20. import freemarker.template.TemplateException;
  21.  
  22. public class FreeMarkerEngine {
  23. private static Log logger = LogFactory.getLog(FreeMarkerEngine.class);
  24. private Configuration freemarker_cfg = null;
  25.  
  26. /**
  27. * 设置关键字,描写叙述,内容并调用
  28. * @param fileName 将要生成的jsp页面的名字
  29. * @param content jsp页面的主体内容
  30. * @param keywords 关键字
  31. * @param explanation 说明
  32. * @param template 生成该jsp所使用的ftl模板的名字
  33. * @throws IOException
  34. */
  35. public void getAbuoutUsJSP(String template,String fileName,String content,String keywords,String explanation,String sRootDir,String title) throws IOException{
  36.  
  37. ContentItem contentItem = new ContentItem();
  38. FreeMarkerEngine fme = new FreeMarkerEngine();
  39. /*****设置关键词*******/
  40. contentItem.setKeywords(keywords);
  41. /*****设置描写叙述*****/
  42. contentItem.setExplanation(explanation);
  43. /****设置内容****/
  44. contentItem.setContent(content);
  45. /****设置大标题****/
  46. contentItem.setTitle(title);
  47. Map root = new HashMap();
  48. root.put("contentItem",contentItem);
  49. String sGeneFilePathRoot = "/";
  50. boolean bOK = fme.geneJSPFile("/" + template, root, sGeneFilePathRoot, fileName,sRootDir);
  51. }
  52.  
  53. /**
  54. * 生成jsp或html页面
  55. * @param templateFileName
  56. * @param propMap
  57. * @param htmlFilePath
  58. * @param htmlFileName
  59. * @param sRootDir 生成的jsp存放的路径
  60. * @return
  61. * @throws IOException
  62. */
  63. //private boolean geneJSPFile(String templateFileName,Map propMap ,String jspFilePath,String jspFileName,String sRootDir) throws IOException{
  64. public boolean geneJSPFile(String templateFileName,Map propMap ,String jspFilePath,String jspFileName,String sRootDir) throws IOException{
  65.  
  66. try{
  67. Template t = getFreeMarkerCFG().getTemplate(templateFileName);
  68. File afile = new File(sRootDir + "/" + jspFilePath + "/" + jspFileName);
  69. Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(afile)));
  70. t.process(propMap, out);
  71. }catch(TemplateException e){
  72. return false;
  73. }
  74. return true;
  75. }
  76.  
  77. /**
  78. * 读取ftl模板文件
  79. * @return
  80. */
  81. private Configuration getFreeMarkerCFG(){
  82. if(null == freemarker_cfg){
  83. freemarker_cfg = new Configuration();
  84. freemarker_cfg.setClassForTemplateLoading(this.getClass(), "/resources/ftl");
  85. }
  86. return freemarker_cfg;
  87. }
  88. }

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

FreeMarker静态化文件解决SEO推广问题的更多相关文章

  1. 利用freemarker 静态化网页

    1.介绍-FreeMarker是什么 模板引擎:一种基于模板的.用来生成输出文本的通用工具 基于Java的开发包和类库 2.介绍-FreeMarker能做什么 MVC框架中的View层组件 Html页 ...

  2. 利用FreeMarker静态化网页

    1.介绍-FreeMarker是什么 模板引擎:一种基于模板的.用来生成输出文本的通用工具 基于Java的开发包和类库 2.介绍-FreeMarker能做什么 MVC框架中的View层组件 Html页 ...

  3. 网页静态化技术Freemarker的详细介绍

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

  4. 网页静态化解决方案-Freemarker demo+语法

    1.网页静态化技术Freemarker 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说 ...

  5. 网页静态化技术Freemarker

    1.为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信息 ...

  6. 网页静态化解决方案Freemarker

    序言: 沉淀了三个月,逐步将自己最近两年在公司中用到的技术和知识点,重新整理归纳了下,对比以前可以发现,现在技术更新越来越快,也越来越成熟,在互联网企业,用到的技术也更先进,更领先,比如微服务.分布式 ...

  7. 网页静态化技术--Freemarker入门

    网页静态化技术:为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又 ...

  8. 使用Freemarker 实现JSP页面的静态化

    使用Freemarker 静态化网页 一.原理 Freemarker 生成静态页面,首先需要使用自己定义的模板页面,这个模板页面可以是最最普通的html,也可以是嵌套freemarker中的 取值表达 ...

  9. springboot2.0结合freemarker生成静态化页面

    目录 1. pom.xml配置 2. application.yml配置 3. 使用模板文件静态化 3.1 创建测试类,编写测试方法 3.2 使用模板字符串静态化 使用freemarker将页面生成h ...

随机推荐

  1. 94.Txx考试

    2894 Txx考试  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description Txx是一个成绩很差的人,考试便成了他 ...

  2. BaseLoadDataForNetFragment

    /** * Fragment 加载网络请求 */ public abstract class BaseLoadDataForNetFragment extends Fragment { // 视图是否 ...

  3. Android Toolbar返回按钮颜色修改

    // 代码设置toolbar返回键颜色为白色 val upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mater ...

  4. PHP 5.3.13 memcache win 64 配置和安装

    --环境: windows 2008 R2 64位 wampserver2.2e-php5.3.13-httpd2.2.22-mysql5.5.24-x64 --目标: 实现 php 用memcach ...

  5. POJ 2019 Cornfields (二维RMQ)

    Cornfields Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4911   Accepted: 2392 Descri ...

  6. DockManager

    Devexpress----DockManager类似VS左右上下浮动栏停靠DockManager->Customize->DockPanel->NEW->Text='详细': ...

  7. webpack与browser-sync热更新原理深度讲解

    本文首发于CSDN网站,下面的版本又经过进一步的修订.原文:webpack与browser-sync热更新原理深度讲解本文包含如下内容: webpack-hot-middleware EventSou ...

  8. 利用谷歌API生成二维码

    http://chart.apis.google.com/chart?cht=qr&chs=104x104&chld=L|0&chl=http://www.cnblogs.co ...

  9. webService 三要素

    WebService(jax-ws)三要素 SOAP: 基于HTTP协议,采用XML格式,用来传递信息的格式. WSDL: 用来描述如何访问具体的服务.(相当于说明书) UDDI: 用户自己可以按UD ...

  10. 网络工程师岗位基础面试题【适用于CCNA/CCNP基础】

    网络工程师岗位基础面试题[适用于CCNA/CCNP基础] 1: 交换机是如何转发数据包的?交换机通过学习数据帧中的源MAC地址生成交换机的MAC地址表,交换机查看数据帧的目标MAC地址,根据MAC地址 ...