- 浏览: 541755 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (230)
- java (87)
- c/c++/c# (39)
- ASP.net MVC (4)
- eclipse/visual studio (3)
- tomcat/weblogic/jetty (13)
- linux/unix/windows (20)
- html/javascript/jquery/kendo/bootstrap/layui/vue/react (31)
- hibernate/struts/spring/mybatis/springboot (21)
- lucene/solr/ELK (2)
- shiro (0)
- oracle/sqlserver/mysql/postgresql (23)
- shell/python/ruby (6)
- android (0)
- maven/ant (1)
- freemarker/thymeleaf/velocity (1)
- open source project (41)
- cache/memcached/redis (0)
- nosql/hadoop/hbase/mongodb (0)
- system architecture/dubbo/zookeeper (0)
- software testing (0)
- system optimization (0)
- system security (0)
- tcp/udp/http (2)
- roller/wordpress (2)
- 工具收藏 (8)
- 文摘 (4)
- 生活 (0)
最新评论
-
coconut_zhang:
这个demo 非常完整了,是指下面说的那个html 模版,模版 ...
flying sauser, thymeleaf实现PDF文件下载 -
a93456:
你好,你有完整的demo吗? String template这 ...
flying sauser, thymeleaf实现PDF文件下载 -
yujiaao:
fn 函数循环是没有必要的啊,可以改成
protecte ...
Java 笛卡尔积算法的简单实现 -
安静听歌:
设置了.setUseTemporaryFileDuringWr ...
使用jxl导出大数据量EXCEL时内存溢出的解决办法 -
q280499693:
写的很详细,但是我现在想知道他们是怎么定位log4j.prop ...
关于SLF4J结合Log4j使用时日志输出与指定的log4j.properties不同
做程序也做了将近4年时间了,从来没有发过什么技术性的文章,今天发一个只在大家一起共同学习进步,如有错误地方请指正。
最近自己做了一个做网络广告的网站叫全方位商机平台的项目,由于网站首页上板块划分很多,不同板块的数据库查询方式不同,首页内容量巨大,如果按照一般的动态jsp页面的话那么数据库查询将是巨大的开销,会导致首页访问速度的下降。于是考虑将这个首页全部静态化。参考地址:http://www.361pt.com/。首页的速度是非常快的。
整个网站才用struts2 + spring + hibernate + freemarker + urlrewrite完成。首页纯静态化,频道及其他页面通过urlrewrite伪静态。现在废话少说。我先给出首页jsp body源代码:
01 |
< body >
|
02 |
< div id = "wrap" >
|
03 |
<!--头部开始-->
|
04 |
< jsp:include page = "/html/top.html" flush = "true" ></ jsp:include >
|
05 |
<!--头部结束-->
|
06 |
<!--导航开始-->
|
07 |
< jsp:include page = "/html/channel.html" flush = "true" ></ jsp:include >
|
08 |
<!--导航结束-->
|
09 |
< jsp:include page = "/html/center.html" flush = "true" ></ jsp:include >
|
10 |
<!--友情连接开始-->
|
11 |
< jsp:include page = "/html/index_link.html" flush = "true" ></ jsp:include >
|
12 |
<!--友情结束-->
|
13 |
<!--底部开始-->
|
14 |
< jsp:include page = "/html/bottom.html" flush = "true" ></ jsp:include >
|
15 |
<!--底部结束-->
|
16 |
</ div >
|
17 |
</ body >
|
整个网站首页的基本结构是通过jsp的include标签将所有通过freemarker生成的静态页面组织起来。后台控制各个部分的静态页生成。这样做将首页进行了拆分,便于了静态页面的维护,当我们需要生成“友情链接”部分的时候就只生成友情链接部分,而不需要将整个页面都从新生成一次。
以下是我生成静态页最核心的方法,使用freemarker。
01 |
/**
|
02 |
* 生成静态页面主方法
|
03 |
* @param context ServletContext
|
04 |
* @param data 一个Map的数据结果集
|
05 |
* @param templatePath ftl模版路径
|
06 |
* @param targetHtmlPath 生成静态页面的路径
|
07 |
*/
|
08 |
public static void crateHTML(ServletContext context,Map<String,Object> data,String templatePath,String targetHtmlPath){
|
09 |
Configuration freemarkerCfg = new Configuration();
|
10 |
//加载模版
|
11 |
freemarkerCfg.setServletContextForTemplateLoading(context, "/" );
|
12 |
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8" );
|
13 |
try {
|
14 |
//指定模版路径
|
15 |
Template template = freemarkerCfg.getTemplate(templatePath, "UTF-8" );
|
16 |
template.setEncoding( "UTF-8" );
|
17 |
//静态页面路径
|
18 |
String htmlPath = context.getRealPath( "/html" )+ "/" +targetHtmlPath;
|
19 |
File htmlFile = new File(htmlPath);
|
20 |
Writer out = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(htmlFile), "UTF-8" ));
|
21 |
//处理模版
|
22 |
template.process(data, out);
|
23 |
out.flush();
|
24 |
out.close();
|
25 |
} catch (Exception e) {
|
26 |
e.printStackTrace();
|
27 |
}
|
28 |
} |
其实很简单,只要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文件。友情链接数据来源通过数据库查询获取。
然后再写一个方法专门生成友情链接静态页面:
1 |
/**
|
2 |
* 生成友情链接的静态页index_link.html
|
3 |
* @param context
|
4 |
* @param data
|
5 |
*/
|
6 |
public static void createIndexFriendLink(ServletContext context,Map<String,Object> data){
|
7 |
crateHTML(context,data, "index_link.ftl" , "index_link.html" );
|
8 |
} |
此方法调用上面的createHTML方法。
然后根据以上方法我们就可以再Struts2的action里面从数据库查询数据放入map调用createIndexFriendLink()方法生成静态页了。
这是action中的一个方法:
01 |
/**
|
02 |
* 生成友情链接静态页index_link.html
|
03 |
* @return
|
04 |
*/
|
05 |
public String createLink(){
|
06 |
//权限验证
|
07 |
if (! this .isAccess())
|
08 |
return "error" ;
|
09 |
try {
|
10 |
//得到友情链接
|
11 |
List links = friendLinkDAO.findAll();
|
12 |
//准备数据
|
13 |
HashMap<String,Object> data = new HashMap<String,Object>();
|
14 |
data.put( "links" , links);
|
15 |
//调用静态页面方法
|
16 |
HTML.createIndexFriendLink(ServletActionContext.getServletContext(), data);
|
17 |
addActionMessage( "静态页面生成成功!" );
|
18 |
return "message" ;
|
19 |
} catch (Exception e){
|
20 |
e.printStackTrace();
|
21 |
return "failure" ;
|
22 |
}
|
23 |
} |
List links = friendLinkDAO.findAll();通过spring注入action的hiberate DAO获取数据给list然后通过以下代码
HashMap<String,Object> data = new HashMap<String,Object>();
data.put("links", links);
准备数据调用createIndexFriendLink()方法。
以下是:ftl模版源码:
01 |
<# if links?size != 0 >
|
02 |
<div class = "link" >
|
03 |
<strong>友情链接:</strong>
|
04 |
<#list links as link>
|
05 |
<a href= "${link.linkUrl}" target= "_blank" title= "${link.linkName}" >${link.linkName}</a>
|
06 |
</#list>
|
07 |
</div> |
08 |
<# else >
|
09 |
<div class = "link" ></div>
|
10 |
</# if >
|
这样友情链接静态页就生成了。然后其他静态页依此葫芦画瓢。
总结:虽然静态页访问速度快,但实现起来毕竟还是比较麻烦了,维护也是一个麻烦事情。如果您的站点更新速度快那么就需要在你的后台数据更新部分调用相应的createHTML方法实时的生成静态页面。如果更新速度不慢可以在后台手动更新或者利用操作系统的定时任务功能去执行你的静态页面生成程序。www.361pt.com这个网站我是采用了这两种方式。
发表评论
-
easypoi 按照模板到出excel并合并单元格
2022-11-10 21:46 144这是entity类,注解的mergeVertical是纵向合 ... -
Spring Data JPA框架系列(三)-自定义Repository接口详解
2022-05-08 09:03 0前面讲了Spring Boot 整合Spring Boot ... -
Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat
2017-03-31 14:59 1360一、概述 1、问题描述 使用Java处 ... -
logback的使用和logback.xml详解
2017-03-09 11:20 2183一、logback的介绍 Logback是由log4j ... -
jxls操作excel文件
2017-03-03 14:51 1093JXLS是基于Jakarta POI API的Excel报表 ... -
flying sauser, thymeleaf实现PDF文件下载
2016-06-17 14:58 5217thymeleaf 的资料比较少,资料大部分都是和spri ... -
thymeleaf与spring整合
2016-06-15 10:08 12341、使用的是Spring EL而不是Ognl。2、访问上下文 ... -
SpringMVC 400 Bad Request 问题
2016-06-15 09:11 1964在提交表单时,发生400错误,并未进入save方法。 ... -
eclipse插件Maven添加依赖查询无结果的解决方法(Select Dependency doesn't work)
2016-04-22 08:33 735在eclipse中用过maven的可能都遇到过这种情况,我 ... -
Java_Ant详解
2015-06-15 16:54 7261,什么是antant是构建工 ... -
httpClient通过代理(Http Proxy)进行请求
2014-09-16 14:18 1225httpClient通过代理(Http Proxy)进行请求 ... -
httpclient上传文件及传参数
2014-09-16 11:07 11633用到的包有commons-httpclient-3.0.1. ... -
Java文件下载的几种方式
2013-08-19 14:15 872public HttpServletResponse dow ... -
http上传文件深度解析-高性能http传输
2013-07-23 10:41 9765最近在做web服务器的时候将一些应用集成在了服务器里面,比 ... -
plupload实现多图片上传
2013-07-19 16:12 23283最近发现一个非常牛的上传组件(http://www.plu ... -
java servlet common-fileupload 实现的文件批量上传
2013-07-18 14:31 6418结合前辈们的代码, 写了个用servlet 和 common ... -
调用axis2 WebService三种方法
2013-06-28 13:41 1798第一:简单的使用axis2包自己实现调用 package ... -
java-jsch实现sftp文件操作
2013-06-26 13:55 3667(曾在天涯)的文章详细讲解了jsch中的函数以及用法 ht ... -
url encode的问题
2012-11-06 08:27 60321.urlencode和decode 字符的编码和解码在有中 ... -
Java集合运算(交集,并集,差集)
2012-11-02 14:59 12984在实现数据挖掘一些算法或者是利用空间向量模型来发现相似文档的时 ...
相关推荐
5. **静态化实现步骤**: - 数据准备:构建数据模型,这可以是数据库查询结果或者由Java服务提供的任何动态数据。 - 模板渲染:使用Freemarker API加载模板文件,结合数据模型生成HTML字符串。 - 文件写入:将...
本项目利用了`httpclient`与`freemarker`这两个工具来实现静态化的分页功能。下面将详细阐述这两个工具以及它们在静态化分页中的应用。 首先,`httpclient`是Apache的一个开源HTTP客户端库,它提供了丰富的API,...
在网站静态化的过程中,Freemarker扮演着关键角色。通过将动态数据注入到预定义的模板中,它能够生成HTML或其他静态格式的文件,从而极大地提高了网站的访问速度,减轻了服务器的负担。 在网站静态化时,Freemarker...
总结来说,这个例子展示了如何结合Struts1.2和Freemarker2.3.8实现登录成功页面的静态化,通过静态化可以提高网站性能,减轻服务器负担,提升用户体验。在实际开发中,开发者可以根据项目需求灵活运用这些技术和策略...
通过以上步骤,你就可以在MyEclipse中使用FreeMarker实现JSP页面的静态化。记住,良好的分层设计和模板使用习惯能显著提高代码质量,使项目更加易于维护和扩展。继续深入学习FreeMarker的高级特性,你将能够更高效地...
ssh+FreeMarker静态化网页例子
前台页面的静态化就有利于SEO,所以这个问题摆在了我的面前,在网上一搜,关于这方面的资料不是很多,又很杂,关于这方面的知识,越来或多的程序员将会碰到,原来项目中这部分静态化的功能主要由我来做的,现在我将...
本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....
8. **静态页面生成**:整合Struts2和Freemarker的一个常见应用是生成静态页面,提高网站性能。这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和...
Freemarker是一个强大的模板...在实际项目中,还可以利用Freemarker的条件语句、循环结构、宏等高级特性,实现更复杂的逻辑和布局。总的来说,Freemarker提供了一种强大且灵活的方式,让开发者可以高效地生成静态内容。
创建静态页面工具类,需要Freemarker的支持
通过SpringBoot2和FreeMarker的整合,我们可以构建高效的静态化系统,提升网站性能,同时降低服务器负载,为用户提供更好的浏览体验。在实际项目中,应根据具体需求选择合适的静态化策略,平衡性能、实时性和维护...
总之,“struts2+freemarker 生成静态页面”是一个旨在提升Web应用性能的技术实践,通过结合Struts2的MVC框架和FreeMarker的模板引擎,实现了动态内容到静态HTML的转化,为用户提供更快的加载速度和更好的浏览体验。...
综上所述,实现网站静态化是一个涉及前端模板引擎、后端编程、数据库操作以及URL重写等多个环节的过程。通过这个"网页静态化例程"的学习,你可以掌握基本的静态化技术,为构建高性能、易搜索的网站奠定基础。而...
下面将详细解释如何在Spring MVC项目中实现i18n,并提供一个Freemarker的小实例。 **1. i18n的概念** i18n代表“国际化”,这里的数字18代表'i'和'n'之间的字母数量。它的目标是设计应用程序,使其能够轻松地适应...
在本项目"springboot整合freemarker生成静态html的demo.zip"中,我们将探讨如何将SpringBoot框架与FreeMarker模板引擎结合,以实现动态数据驱动的静态HTML页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...
4. 初始化`Configuration`对象,这是FreeMarker的核心配置类,用于管理模板的加载和解析。 5. 使用`setDirectoryForTemplateLoading`设置模板文件所在的目录,并加载模板。 6. 使用`setObjectWrapper`设置对象包装器...
Freemarker是一个强大...通过上述步骤和示例,你可以了解并实现使用Freemarker生成静态HTML的基本过程。在实际开发中,这个功能可以用于构建静态站点、邮件模板或者API文档等场景,极大地提高了代码的可维护性和效率。
在实际项目中,通过结合Java和Freemarker,开发者可以构建出高效、灵活的静态化解决方案,提升网站性能。 总结起来,Java中的Freemarker页面静态化实例详解主要涉及Freemarker的基本用法、数据格式化以及处理空值的...