`
chensl
  • 浏览: 57995 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

FreeMarker静态化文件(转)

 
阅读更多

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

                 http://www.tuicool.com/articles/fMFb2y

分享到:
评论

相关推荐

    httpclient,freemarker的静态化分页

    总的来说,`httpclient`与`freemarker`在页面静态化分页中的结合使用,既保证了数据的动态获取,又实现了静态文件的高效生成,是Web开发中一种实用的优化手段。通过合理的代码组织和设计,可以构建出高效且易于维护...

    Freemarker网站静态化的实现实例源码(eclipse)

    4. **项目结构**:一个典型的Freemarker静态化项目可能包含以下部分: - 模板文件夹(templates):存放Freemarker模板文件,如.ftl。 - Java源代码文件夹(src):包含处理动态数据的Java类,如Controller和Model...

    freemarker把jsp静态化简单应用

    本教程将介绍如何在Java Web项目中利用FreeMarker进行JSP页面的静态化,适合初学者入门学习。 1. **FreeMarker基本概念** FreeMarker是一个基于模板的语言,它与编程语言不同,不包含任何控制结构或函数调用。它的...

    freemarker权威版 网站静态化

    在网站静态化的过程中,Freemarker扮演着关键角色。通过将动态数据注入到预定义的模板中,它能够生成HTML或其他静态格式的文件,从而极大地提高了网站的访问速度,减轻了服务器的负担。 在网站静态化时,Freemarker...

    struts1.2+freemarker实现登录成功页面静态化例子

    总结来说,这个例子展示了如何结合Struts1.2和Freemarker2.3.8实现登录成功页面的静态化,通过静态化可以提高网站性能,减轻服务器负担,提升用户体验。在实际开发中,开发者可以根据项目需求灵活运用这些技术和策略...

    freemarker生成静态html示例

    本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....

    SpringBoot2 整合FreeMarker模板,完成页面静态化处理.docx

    【SpringBoot2 整合FreeMarker模板,完成页面静态化处理】 在Web开发中,页面静态化是一种提高网站性能和用户体验的技术。它涉及到将原本动态生成的页面转换为静态HTML文件,减少对服务器的依赖,加快页面加载速度...

    可视化div布局 生成freemarker模板

    然后在FreeMarker模板中引用这些静态资源,使用FTL语法将动态数据与布局结合。Spring MVC控制器接收请求,处理业务逻辑,构建数据模型,最后将模型传递给FreeMarker模板进行渲染。 7. **最佳实践**:为了提高效率和...

    网页静态化例程 网站静态化学习的第一步

    静态化是指将动态生成的网页转换为静态HTML文件,用户访问时直接读取这些预先生成的文件,而非通过服务器实时生成。这样不仅提高了用户体验,还减轻了服务器处理请求的压力。 在使用MyEclipse作为开发工具时,我们...

    首页静态化步骤

    在Web开发中,首页静态化是常见的性能优化手段。 首先,我们需要了解动态首页和静态首页的区别。动态首页是由服务器端的脚本(如PHP、JSP或ASP.NET)实时生成的,每次请求都会根据数据库中的数据动态生成页面内容。...

    动态页面静态化汇总--页面静态化方案

    在动态页面静态化中,Freemarker可以用来生成静态HTML文件,模板中填入数据模型后,静态页面即可自动生成。 3. **URLRewrite**: URLRewrite是一个常用的Apache服务器模块,它可以实现URL重写功能。在静态化过程中...

    教你如何用FreeMarker生成静态页面.doc

    在生成静态页面的过程中,首先需要准备两个关键元素:FreeMarker模板文件和数据模型。模板文件是包含HTML和FreeMarker指令的文件,而数据模型是一个Map,用于存放页面中需要展示的数据。例如,如果页面中需要显示...

    有关Java页面静态化

    Java页面静态化是一种提高Web应用性能的技术,它通过将动态生成的HTML页面转换为静态HTML文件,从而减少了服务器处理请求的负担,加快了用户访问速度。这种技术在高并发、大数据量的网站中尤其重要,因为它能显著...

    Struts2整合Freemarker生成静态页面

    这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和异常处理**:Struts2和Freemarker都有自己的错误处理机制。当模板或Action执行出错时,可以通过...

    java 页面静态化

    在进行页面静态化时,我们还需要考虑一些问题,比如如何处理动态内容(如用户登录状态、个性化推荐)、如何同步静态文件和动态数据、以及如何清理过期的静态文件等。这些问题可以通过设计合理的缓存策略和定时任务来...

    生成静态页面 freemarker模板

    在IT行业中,生成静态页面是一种常见的优化网站性能和提高用户体验的方法。它涉及到将动态内容转换为HTML文件,这些文件可以直接由...结合合理的缓存策略和自动化更新机制,可以实现高效、自动化的静态页面生成方案。

    freemark 页面静态化

    本示例主要探讨如何使用Freemarker实现页面静态化。 页面静态化分为两种类型:伪静态和全静态化。伪静态是将动态URL转换为静态化的URL形式,但实际请求仍然是动态处理;全静态化则是将动态内容转化为独立的HTML文件...

    java JSP页面静态化总结_动态页面变为静态页面以减少访问数据库的次数提高速度.zip

    - JSP页面静态化的核心思想是将原本需要服务器实时解析的动态内容,提前转换为静态HTML文件,存储在服务器上。这样,当用户请求这些页面时,服务器不再需要执行JSP脚本,而是直接返回已经生成好的静态HTML,大大...

    java静态文件处理

    在Java编程语言中,处理静态文件是一项常见的任务,特别是在构建Web应用程序时。静态文件通常指的是HTML、CSS、JavaScript、图片等非动态内容,这些文件在服务器端不需要额外的处理即可发送给客户端。本篇文章将深入...

    Java html转word 使用FreeMarker

    在代码中,使用FreeMarker API加载模板文件,创建`Template`对象,然后用数据模型实例化`Map`对象。通过`Configuration`对象的`process`方法,将模板与数据模型合并,生成Word文档的字节流。最后,你可以选择将这个...

Global site tag (gtag.js) - Google Analytics