FreeMarker静态化文件解决SEO推广问题
1.问题背景
SEO一直是站点对外推广的一个重要手段,如何可以让搜索引擎高速搜索到站点对于增强站点的浏量,提升站点对外形象有着重要意义。那么如何可以对SEO进行优化呢?一个很经常使用的手段就是在网页的keyword部分多添加可以表示本网页的keyword,而且这些keyword在接下来的网页正文中可以多次出现,另外一个重要的方法就是假设在本网页中存在文章链接。最好是每一个链接的地址是不一样的,这样的不一样不是指同一个链接传的參数不一样,而是每一个链接相应的都是一个新的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推广问题的更多相关文章
- 利用freemarker 静态化网页
1.介绍-FreeMarker是什么 模板引擎:一种基于模板的.用来生成输出文本的通用工具 基于Java的开发包和类库 2.介绍-FreeMarker能做什么 MVC框架中的View层组件 Html页 ...
- 利用FreeMarker静态化网页
1.介绍-FreeMarker是什么 模板引擎:一种基于模板的.用来生成输出文本的通用工具 基于Java的开发包和类库 2.介绍-FreeMarker能做什么 MVC框架中的View层组件 Html页 ...
- 网页静态化技术Freemarker的详细介绍
网页静态化技术Freemarker 一.Freemarker的基本介绍 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道 ...
- 网页静态化解决方案-Freemarker demo+语法
1.网页静态化技术Freemarker 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说 ...
- 网页静态化技术Freemarker
1.为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信息 ...
- 网页静态化解决方案Freemarker
序言: 沉淀了三个月,逐步将自己最近两年在公司中用到的技术和知识点,重新整理归纳了下,对比以前可以发现,现在技术更新越来越快,也越来越成熟,在互联网企业,用到的技术也更先进,更领先,比如微服务.分布式 ...
- 网页静态化技术--Freemarker入门
网页静态化技术:为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又 ...
- 使用Freemarker 实现JSP页面的静态化
使用Freemarker 静态化网页 一.原理 Freemarker 生成静态页面,首先需要使用自己定义的模板页面,这个模板页面可以是最最普通的html,也可以是嵌套freemarker中的 取值表达 ...
- springboot2.0结合freemarker生成静态化页面
目录 1. pom.xml配置 2. application.yml配置 3. 使用模板文件静态化 3.1 创建测试类,编写测试方法 3.2 使用模板字符串静态化 使用freemarker将页面生成h ...
随机推荐
- “过时”的SpringMVC我们到底在用什么?深入分析DispatchServlet源码
之前已经分析过了Spring的IOC(<零基础带你看Spring源码--IOC控制反转>)与AOP(<从源码入手,一文带你读懂Spring AOP面向切面编程>)的源码,本次就 ...
- [转]Spring配置之OpenSessionInViewFilter
参考: OpenSessionInViewFilter作用及配置:http://www.yybean.com/opensessioninviewfilter-role-and-configuratio ...
- java.lang.RuntimeException: com.intellij.ide.plugins.PluginManager
描述: 在mac电脑上的Android Studio.因为项目需求,加载plugins中的dart和Flutter插件.经过***后,依然无法从AS中加载进来. 曲折到Jetbrains官网下载了da ...
- 使用参数化查询防止SQL注入漏洞
参数化查询防止SQL注入漏洞 看别人的登录注册sql语句有没漏洞即可 Where name=‘admin’ or ‘1=1’ and password=’123’; 可以Or ‘1=1’就是漏洞 h ...
- POJ 3608 Bridge Across Islands(旋转卡壳,两凸包最短距离)
Bridge Across Islands Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7202 Accepted: ...
- vue-router 2.0 改变的内容
2.x 版本的 vue-router 相比之前的0.7.x版本,有很多破坏性改变: 通用 API 的修改 The old router.go() is now router.push() . 新的 r ...
- 【java】LIst切割----划分 List为几个LIst的几种工具类 1.按照目标份数划分 2.按照目标容量划分 【适用场景:mybatis分批次In查询,放置In拼接sql过长】
如题,示例代码如下: /** * 1> 按照份数---划分list * @param source * @param num 想要划分成多少份 * @return */ public stati ...
- .Net的差评
.NET平台很棒.真的很棒.直到它不再那么棒.我为什么不再用.NET?简单来说,它限制了我们选择的能力(对我来说很重要),转移了我们的注意力,使得我们向内认知它的安全性,替代了帮助我们认知外面广阔世界 ...
- Postgres间隔大量写IO的解决办法
概述 为了保证数据可靠性,同时还要保证好的读写性能,以及读写的一致性,经过多年的积累,REDO日志,shared buffer等基本成为关系型数据库的标配.postgres也不例外. 为了保证数据的可 ...
- Boost::Lexical_cast 的使用
.C++代码 #include <boost/lexical_cast.hpp> #include <iostream> int main() { using boost::l ...