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的。
原文地址:http://blog.csdn.net/a1314517love/article/details/41143709
相关推荐
页面静态化需求 理解 理解页面静态化及页面发布流程图 FreeMarker研究 ...freemarker静态化的测试代码"页面静态化 应用 重点 能够完成页面静态化测试 "能够开发轮播图DataUrl接口能够远程请求轮播图DataUrl接口理解...
Struts2集成FreeMarker和Velocity,写成了工具类,快速实现页面静态化,以后直接调用即可,无需修改任何源代码,改压缩文件包括 1、工具类; 2、源码(含jar包); 3、mysql数据库可执行文件; 4、struts2集成...
3. 个人觉得freemarker 和taglib,jsf至少在使用层面上很像,但是freemarker 的macro容易写,几行代码就搞定了,taglib和jsf需要写一堆java文件和tld文件,繁琐得很 4.freemarker 不能直接调用java对象的method. 这点...
包括使用freemarker和velocity两种技术来实现静态化。压缩包里面的文件有说明文档,说得很仔细,特别适合入门级别的人参考。还有freemarker和velocity开发所需要的jar包和插件。
该书非常详细地讲述了如何去使用freemarker生成静态文件的技术,值得一看
Freemarker的jar包是动态网页静态化的必备jar包,静态化的工作基本上都是由他来完成的,如果没有他,你就不用往下看了,打魔兽去吧。Urlrewrite的jar包是用来解决将动态的网页静态化之后的传参问题的。freemarker-...
2.静态化 3.搜索引擎优化 ... 静态化 cms ssh lucene 单点登陆 jar包太多,未上传,但全部列出,可自己加入 使用方法:将源码导入myeclipse,然后加入相应jar包(按lib下图片中加入), 然后发布,访问...
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。
dubbo,redis,solr,freemarker,activeMQ,springBoot框架,微信支付,nginx负载均衡,电商活动秒杀,springSecurity安全框架,FastDFS分布式文件服务器,还会涉及到代码生成器, 前台的技术有angularJS和BootStrap框架,此...
多个文件服务器读写,这里可采用SMB协议 页面静态化,可采用freemarker开源框架 如果考虑到大量的读写请求,则将请求分布式或采用调度的办法来解决 第一点我们首先应该考虑文件服务器与静态页面的映射关系,即什么...
INF下是后台配置文件WebContent文件夹下面是前端代码后台管理系统代码专栏前台页面频道代码通用项目前端一些通用文件staticFile静态化生成的前台页面#初步使用技术数据库采用mysql5后台路由采用spring mvc静态化...
PublicCMS内容管理系统:基于Java开发...系统支持静态化、服务器端包含、多级缓存、全文搜索和复杂搜索功能,后台操作支持手机设备。目前,PublicCMS在全球拥有约0.0005%的用户,支持中文、繁体中文和英文等多种语言。
本软件采用jsp+sqlserver+ hibernate+struts实现,并使用了freemarker静态化、会员登录的状态以及文章点击使用ajax动态处理。本系统以学习技术为目的开发。本系统开放源代码,只为了能给jsp学习者带来一点帮助。 ...
一个J2EE购物网站的实现 运用struts1.2+hibernate+spring 框架,数据库连接池,事务管理;Struts 应用国际化,Struts 标签库与Tiles框架, JSTL标签库,... 采用优化性能技术,采用oscache缓存,freemarker静态页面生成
该属性设置是否每次HTTP请求到达时,系统都重新加载资源文件(允许国际化文件重载).该属性默认值是false.在开发阶段将该属性设置为true会更有利于开发,但在产品发布阶段应将该属性设置为false. 提示: 开发阶段将该属性...
最全的配置文件资料,springMvc包含josn、xml、文件下载、静态资源配置、日志拦截器、freeMarker、错误日志、国际化等各种配置
springmvc最全的配置文件资料,springMVC包含json、xml、文件下载、静态资源配置、日志拦截器、freeMarker、错误日志、国际化等各种配置
├ 全站静态化 ├ FTP同步 ├ 服务器分布部署 ├ 批处理 (批量移动文章/栏目、批量删除、批量上传图片/附件等) ├ 一键排版 ├ 定时任务 ├ tag自动提取 站点配置 ├ 网站参数配置 ├ 用户注册配置 ├ RSS...
* freemarker静态模板 * jquery1.7 ##有问题反馈 在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用...
加载附加的国际化属性文件(不包含.properties后缀) struts.custom.properties Location of additional configuration properties files to load 加载附加的配置文件的位置 struts.devMode Whether Struts ...