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
相关推荐
总的来说,`httpclient`与`freemarker`在页面静态化分页中的结合使用,既保证了数据的动态获取,又实现了静态文件的高效生成,是Web开发中一种实用的优化手段。通过合理的代码组织和设计,可以构建出高效且易于维护...
4. **项目结构**:一个典型的Freemarker静态化项目可能包含以下部分: - 模板文件夹(templates):存放Freemarker模板文件,如.ftl。 - Java源代码文件夹(src):包含处理动态数据的Java类,如Controller和Model...
本教程将介绍如何在Java Web项目中利用FreeMarker进行JSP页面的静态化,适合初学者入门学习。 1. **FreeMarker基本概念** FreeMarker是一个基于模板的语言,它与编程语言不同,不包含任何控制结构或函数调用。它的...
在网站静态化的过程中,Freemarker扮演着关键角色。通过将动态数据注入到预定义的模板中,它能够生成HTML或其他静态格式的文件,从而极大地提高了网站的访问速度,减轻了服务器的负担。 在网站静态化时,Freemarker...
总结来说,这个例子展示了如何结合Struts1.2和Freemarker2.3.8实现登录成功页面的静态化,通过静态化可以提高网站性能,减轻服务器负担,提升用户体验。在实际开发中,开发者可以根据项目需求灵活运用这些技术和策略...
本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....
【SpringBoot2 整合FreeMarker模板,完成页面静态化处理】 在Web开发中,页面静态化是一种提高网站性能和用户体验的技术。它涉及到将原本动态生成的页面转换为静态HTML文件,减少对服务器的依赖,加快页面加载速度...
然后在FreeMarker模板中引用这些静态资源,使用FTL语法将动态数据与布局结合。Spring MVC控制器接收请求,处理业务逻辑,构建数据模型,最后将模型传递给FreeMarker模板进行渲染。 7. **最佳实践**:为了提高效率和...
静态化是指将动态生成的网页转换为静态HTML文件,用户访问时直接读取这些预先生成的文件,而非通过服务器实时生成。这样不仅提高了用户体验,还减轻了服务器处理请求的压力。 在使用MyEclipse作为开发工具时,我们...
在Web开发中,首页静态化是常见的性能优化手段。 首先,我们需要了解动态首页和静态首页的区别。动态首页是由服务器端的脚本(如PHP、JSP或ASP.NET)实时生成的,每次请求都会根据数据库中的数据动态生成页面内容。...
在动态页面静态化中,Freemarker可以用来生成静态HTML文件,模板中填入数据模型后,静态页面即可自动生成。 3. **URLRewrite**: URLRewrite是一个常用的Apache服务器模块,它可以实现URL重写功能。在静态化过程中...
在生成静态页面的过程中,首先需要准备两个关键元素:FreeMarker模板文件和数据模型。模板文件是包含HTML和FreeMarker指令的文件,而数据模型是一个Map,用于存放页面中需要展示的数据。例如,如果页面中需要显示...
Java页面静态化是一种提高Web应用性能的技术,它通过将动态生成的HTML页面转换为静态HTML文件,从而减少了服务器处理请求的负担,加快了用户访问速度。这种技术在高并发、大数据量的网站中尤其重要,因为它能显著...
这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和异常处理**:Struts2和Freemarker都有自己的错误处理机制。当模板或Action执行出错时,可以通过...
在进行页面静态化时,我们还需要考虑一些问题,比如如何处理动态内容(如用户登录状态、个性化推荐)、如何同步静态文件和动态数据、以及如何清理过期的静态文件等。这些问题可以通过设计合理的缓存策略和定时任务来...
在IT行业中,生成静态页面是一种常见的优化网站性能和提高用户体验的方法。它涉及到将动态内容转换为HTML文件,这些文件可以直接由...结合合理的缓存策略和自动化更新机制,可以实现高效、自动化的静态页面生成方案。
本示例主要探讨如何使用Freemarker实现页面静态化。 页面静态化分为两种类型:伪静态和全静态化。伪静态是将动态URL转换为静态化的URL形式,但实际请求仍然是动态处理;全静态化则是将动态内容转化为独立的HTML文件...
- JSP页面静态化的核心思想是将原本需要服务器实时解析的动态内容,提前转换为静态HTML文件,存储在服务器上。这样,当用户请求这些页面时,服务器不再需要执行JSP脚本,而是直接返回已经生成好的静态HTML,大大...
在Java编程语言中,处理静态文件是一项常见的任务,特别是在构建Web应用程序时。静态文件通常指的是HTML、CSS、JavaScript、图片等非动态内容,这些文件在服务器端不需要额外的处理即可发送给客户端。本篇文章将深入...
在代码中,使用FreeMarker API加载模板文件,创建`Template`对象,然后用数据模型实例化`Map`对象。通过`Configuration`对象的`process`方法,将模板与数据模型合并,生成Word文档的字节流。最后,你可以选择将这个...