- 浏览: 486858 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
fanxp:
很好,学习了!
mysql导入数据load data infile用法 -
maomao15:
...
(转) Class.getResource与ClassLoader.getResource()区别 -
贾懂凯:
有maven的配置吗?
Spring MVC整合Velocity的例子 -
kevinhrw:
一个好办法不知道使用"mvc:resources&q ...
Spring3.0 做rest时候拦截js、图片 -
love_miaohong:
这样子设置没作用啊, window7系统下用这个方式不行
MongoDB在windows操作系统cmd下乱码
最近自己做了一个做网络广告的网站叫全方位商机平台的项目,由于网站首页上板块划分很多,不同板块的数据库查询方式不同,首页内容量巨大,如果按照一般的动态jsp页面的话那么数据库查询将是巨大的开销,会导致首页访问速度的下降。于是考虑将这个首页全部静态化。参考地址:http://www.361pt.com/。首页的速度是非常快的。
整个网站才用struts2 + spring + hibernate + freemarker + urlrewrite完成。首页纯静态化,频道及其他页面通过urlrewrite伪静态。现在废话少说。我先给出首页jsp body源代码:
- <body>
- <div id="wrap">
- <!--头部开始-->
- <jsp:include page="/html/top.html" flush="true"></jsp:include>
- <!--头部结束-->
- <!--导航开始-->
- <jsp:include page="/html/channel.html" flush="true"></jsp:include>
- <!--导航结束-->
- <jsp:include page="/html/center.html" flush="true"></jsp:include>
- <!--友情连接开始-->
- <jsp:include page="/html/index_link.html" flush="true"></jsp:include>
- <!--友情结束-->
- <!--底部开始-->
- <jsp:include page="/html/bottom.html" flush="true"></jsp:include>
- <!--底部结束-->
- </div>
- </body>
<body> <div id="wrap"> <!--头部开始--> <jsp:include page="/html/top.html" flush="true"></jsp:include> <!--头部结束--> <!--导航开始--> <jsp:include page="/html/channel.html" flush="true"></jsp:include> <!--导航结束--> <jsp:include page="/html/center.html" flush="true"></jsp:include> <!--友情连接开始--> <jsp:include page="/html/index_link.html" flush="true"></jsp:include> <!--友情结束--> <!--底部开始--> <jsp:include page="/html/bottom.html" flush="true"></jsp:include> <!--底部结束--> </div> </body>
整个网站首页的基本结构是通过jsp的include标签将所有通过freemarker生成的静态页面组织起来。后台控制各个部分的静态页生成。这样做将首页进行了拆分,便于了静态页面的维护,当我们需要生成“友情链接”部分的时候就只生成友情链接部分,而不需要将整个页面都从新生成一次。
以下是我生成静态页最核心的方法,使用freemarker。
- /**
- * 生成静态页面主方法
- * @param context ServletContext
- * @param data 一个Map的数据结果集
- * @param templatePath ftl模版路径
- * @param targetHtmlPath 生成静态页面的路径
- */
- ublic static void crateHTML(ServletContext context,Map<String,Object> data,String templatePath,String targetHtmlPath){
- Configuration freemarkerCfg = new Configuration();
- //加载模版
- freemarkerCfg.setServletContextForTemplateLoading(context, "/");
- freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
- try {
- //指定模版路径
- Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8");
- template.setEncoding("UTF-8");
- //静态页面路径
- String htmlPath = context.getRealPath("/html")+"/"+targetHtmlPath;
- File htmlFile = new File(htmlPath);
- Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
- //处理模版
- template.process(data, out);
- out.flush();
- out.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
/** * 生成静态页面主方法 * @param context ServletContext * @param data 一个Map的数据结果集 * @param templatePath ftl模版路径 * @param targetHtmlPath 生成静态页面的路径 */ public static void crateHTML(ServletContext context,Map<String,Object> data,String templatePath,String targetHtmlPath){ Configuration freemarkerCfg = new Configuration(); //加载模版 freemarkerCfg.setServletContextForTemplateLoading(context, "/"); freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8"); try { //指定模版路径 Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8"); template.setEncoding("UTF-8"); //静态页面路径 String htmlPath = context.getRealPath("/html")+"/"+targetHtmlPath; File htmlFile = new File(htmlPath); Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8")); //处理模版 template.process(data, out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } }
其实很简单,只要Google一下就有很多这方面的代码。我也是Google的代码然后自己再根据实际情况修改。简单说明一下参数:
ServletContext :这个不用说了吧。做java web的应该都知道,只不过struts2中这样获取ServletActionContext.getServletContext()
Map<String,Object> data : 模版的数据来源。freemarker通过一个Map给ftl模版送数据。
现在已友情链接为列子详细介绍静态页面如何生成。其他模块以此类推。
String templatePath : ftl所在的路径。我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。
String targetHtmlPath : 最后生成静态页的路径:我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。
友情链接根据这段代码<jsp:include page="/html/index_link.html" flush="true"></jsp:include>我们需要freemarker生成一个index_link.html文件。友情链接数据来源通过数据库查询获取。
然后再写一个方法专门生成友情链接静态页面:
- /**
- * 生成友情链接的静态页index_link.html
- * @param context
- * @param data
- */
- ublic static void createIndexFriendLink(ServletContext context,Map<String,Object> data){
- crateHTML(context,data,"index_link.ftl","index_link.html");
/** * 生成友情链接的静态页index_link.html * @param context * @param data */ public static void createIndexFriendLink(ServletContext context,Map<String,Object> data){ crateHTML(context,data,"index_link.ftl","index_link.html"); }
此方法调用上面的createHTML方法。
然后根据以上方法我们就可以再Struts2的action里面从数据库查询数据放入map调用createIndexFriendLink()方法生成静态页了。
这是action中的一个方法:
- /**
- * 生成友情链接静态页index_link.html
- * @return
- */
- public String createLink(){
- //权限验证
- if(! this.isAccess())
- return "error";
- try{
- //得到友情链接
- List links = friendLinkDAO.findAll();
- //准备数据
- HashMap<String,Object> data = new HashMap<String,Object>();
- data.put("links", links);
- //调用静态页面方法
- HTML.createIndexFriendLink(ServletActionContext.getServletContext(), data);
- addActionMessage("静态页面生成成功!");
- return "message";
- }catch(Exception e){
- e.printStackTrace();
- return "failure";
- }
- }
/** * 生成友情链接静态页index_link.html * @return */ public String createLink(){ //权限验证 if(! this.isAccess()) return "error"; try{ //得到友情链接 List links = friendLinkDAO.findAll(); //准备数据 HashMap<String,Object> data = new HashMap<String,Object>(); data.put("links", links); //调用静态页面方法 HTML.createIndexFriendLink(ServletActionContext.getServletContext(), data); addActionMessage("静态页面生成成功!"); return "message"; }catch(Exception e){ e.printStackTrace(); return "failure"; } }
List links = friendLinkDAO.findAll();通过spring注入action的hiberate DAO获取数据给list然后通过以下代码
HashMap<String,Object> data = new HashMap<String,Object>();
data.put("links", links);
准备数据调用createIndexFriendLink()方法。
以下是:ftl模版源码:
- <#if links?size != 0>
- <div class="link">
- <strong>友情链接:</strong>
- <#list links as link>
- <a href="${link.linkUrl}" target="_blank" title="${link.linkName}">${link.linkName}</a>
- </#list>
- </div>
- <#else>
- <div class="link"></div>
- </#if>
<#if links?size != 0> <div class="link"> <strong>友情链接:</strong> <#list links as link> <a href="${link.linkUrl}" target="_blank" title="${link.linkName}">${link.linkName}</a> </#list> </div> <#else> <div class="link"></div> </#if>
这样友情链接静态页就生成了。然后其他静态页依此葫芦画瓢。
总结:虽然静态页访问速度快,但实现起来毕竟还是比较麻烦了,维护也是一个麻烦事情。如果您的站点更新速度快那么就需要在你的后台数据更新部分调用相应的createHTML方法实时的生成静态页面。如果更新速度不慢可以在后台手动更新或者利用操作系统的定时任务功能去执行你的静态页面生成程序。www.361pt.com这个网站我是采用了这两种方式。
发表评论
-
ThreadPoolExecutor线程池参数设置技巧
2017-12-19 13:06 1360一、ThreadPoolExecutor的重要参数 ... -
Java中如何设置使用代理IP发送网络请求
2016-04-20 10:45 2074Java中有两种方法可以实现用代理IP连接网络。 方式一, ... -
JDK并发工具包CompletionService和ExecutorCompletionService的好处和使用场景
2016-04-13 14:06 1851《Java并发编程实践》一书6.3.5节Complet ... -
HttpClient容易忽视的细节——连接关闭
2015-09-06 14:09 1163Java代码 HttpCl ... -
深入浅出 消息队列 ActiveMQ
2015-08-21 10:39 1410一、 概述与介绍 ActiveMQ 是Apach ... -
Java 代码 调用浏览器 打开url (支持多个操作系统)
2014-03-31 14:58 1943package com.ab.galaxy.test.mai ... -
Ant 实战
2013-10-22 10:13 859Ant是什么? Ant是一个构建工具,它可以帮助我们 ... -
30天轻松掌握JavaWeb
2013-10-22 10:07 1165Java Web,是用Java技术来解决相关we ... -
在线文档 doc.gotomao.com
2013-06-24 23:00 71http://doc.gotomao.com/ -
(转) Class.getResource与ClassLoader.getResource()区别
2013-06-04 22:14 1711class.getResource(String res)的 ... -
(转)PV,V,UV的概念,采集数据
2012-10-23 13:08 1220GUID IP+ 随机数 ... -
【转】Atlassian Confluence安装以及如何更改数据库
2012-08-22 16:14 3019Confluence是一个国外的一款商业wiki软 ... -
gzip解压
2011-07-26 12:06 707GZIPInputStream GIS=new GZIPInp ... -
MongoDB在windows操作系统cmd下乱码
2011-05-03 14:13 2932原因:由于mongodb后台的字符编码都是utf-8的, ... -
设计自己的Annotation
2011-04-05 11:37 778Annotation在java的世界正铺天盖地展开 ... -
jstl 的 <fn:> 标签应用(转)
2011-01-09 19:08 1051在jsp页面上经常遇到得到集合长度、字符长度、字符 ... -
mencached入门 pdf
2011-01-03 20:19 974见附件 -
让FCKeditor自动换行
2010-12-21 10:03 1597使用FCKEditor进行文本编辑时,当输入满一行时, ... -
Apache POI组件操作Excel,制作报表(二) (转)
2010-12-19 20:26 2038现在来看看Excel的基本设置问题,以2007为例,先从工作 ... -
Apache POI组件操作Excel,制作报表(一) (转)
2010-12-19 19:32 1205Apache的POI组件是Java操作Microsoft ...
相关推荐
4. **项目结构**:一个典型的Freemarker静态化项目可能包含以下部分: - 模板文件夹(templates):存放Freemarker模板文件,如.ftl。 - Java源代码文件夹(src):包含处理动态数据的Java类,如Controller和Model...
本项目利用了`httpclient`与`freemarker`这两个工具来实现静态化的分页功能。下面将详细阐述这两个工具以及它们在静态化分页中的应用。 首先,`httpclient`是Apache的一个开源HTTP客户端库,它提供了丰富的API,...
在网站静态化的过程中,Freemarker扮演着关键角色。通过将动态数据注入到预定义的模板中,它能够生成HTML或其他静态格式的文件,从而极大地提高了网站的访问速度,减轻了服务器的负担。 在网站静态化时,Freemarker...
总结来说,这个例子展示了如何结合Struts1.2和Freemarker2.3.8实现登录成功页面的静态化,通过静态化可以提高网站性能,减轻服务器负担,提升用户体验。在实际开发中,开发者可以根据项目需求灵活运用这些技术和策略...
通过以上步骤,你就可以在MyEclipse中使用FreeMarker实现JSP页面的静态化。记住,良好的分层设计和模板使用习惯能显著提高代码质量,使项目更加易于维护和扩展。继续深入学习FreeMarker的高级特性,你将能够更高效地...
本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....
这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和异常处理**:Struts2和Freemarker都有自己的错误处理机制。当模板或Action执行出错时,可以通过...
4. **实现过程**:在Struts2中,可以通过自定义Result类型来实现静态化。这个Result类型会在Action处理完请求后,将生成的FreeMarker模板内容写入到一个静态HTML文件中。同时,需要设置适当的缓存策略,例如根据内容...
通过SpringBoot2和FreeMarker的整合,我们可以构建高效的静态化系统,提升网站性能,同时降低服务器负载,为用户提供更好的浏览体验。在实际项目中,应根据具体需求选择合适的静态化策略,平衡性能、实时性和维护...
综上所述,实现网站静态化是一个涉及前端模板引擎、后端编程、数据库操作以及URL重写等多个环节的过程。通过这个"网页静态化例程"的学习,你可以掌握基本的静态化技术,为构建高性能、易搜索的网站奠定基础。而...
4. 初始化`Configuration`对象,这是FreeMarker的核心配置类,用于管理模板的加载和解析。 5. 使用`setDirectoryForTemplateLoading`设置模板文件所在的目录,并加载模板。 6. 使用`setObjectWrapper`设置对象包装器...
- **保存为文件**: 将生成的HTML字符串写入到指定的文件中,完成静态化。 4. **示例代码** ```java // 创建数据模型 Map, Object> model = new HashMap(); model.put("title", "Freemarker示例"); model.put...
标题“首页静态化步骤”指的是将网站的动态首页转换为静态HTML页面的过程,这有助于提高网站的加载速度、减轻服务器负担以及优化搜索引擎排名。在Web开发中,首页静态化是常见的性能优化手段。 首先,我们需要了解...
- **URLRewrite实现URL伪静态化**:通过URLRewrite工具,可以改变URL的展示形式,使其看起来像静态页面,但实际仍由动态页面处理。这种方法并不真正生成静态文件,但在用户看来,URL更简洁,更像静态页面。 4. **...
然后在FreeMarker模板中引用这些静态资源,使用FTL语法将动态数据与布局结合。Spring MVC控制器接收请求,处理业务逻辑,构建数据模型,最后将模型传递给FreeMarker模板进行渲染。 7. **最佳实践**:为了提高效率和...
动态页面静态化是一种提高网站性能和搜索引擎友好度的技术手段,主要通过将原本由服务器动态生成的HTML页面转换为预先生成的静态HTML文件。这样,用户请求时,服务器无需执行数据库查询和其他复杂操作,而是直接返回...
总的来说,Freemarker页面静态化能够提高Web应用的性能,减少服务器负载,提升用户体验,尤其适合新闻资讯、博客等需要大量静态页面的网站。同时,它也有助于SEO优化,因为搜索引擎更容易抓取静态HTML页面。因此,...
Velocity和FreeMarker是两种常用的Java模板引擎,它们可以方便地结合JSP(JavaServer Pages)进行动态网页生成,并实现页面静态化。本文将详细介绍如何使用Velocity和FreeMarker模板实现页面静态化,并提供具体的...
实现Java页面静态化的工具和库包括: - **JSP/Servlet**:传统的Java Web开发方式,可以通过JSP标签库和EL表达式生成静态HTML。 - **FreeMarker/Velocity**:模板引擎,允许开发者编写静态HTML模板,动态数据在...
Struts2集成FreeMarker和Velocity,写成了工具类,快速实现页面静态化,以后直接调用即可,无需修改任何源代码,改压缩文件包括 1、工具类; 2、源码(含jar包); 3、mysql数据库可执行文件; 4、struts2集成...