Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1186|回复: 0

freemarker生成静态页

[复制链接]

该用户从未签到

发表于 2011-7-31 22:57:20 | 显示全部楼层 |阅读模式
天生静态页最核心的方法,使用freemarker:

         /**
     * 天生静态页面主方法
     *
@param context ServletContext
     *
@param data 一个Map的数据结果集
     *
@param templatePath ftl模版路径
     *
@param targetHTMLPath 天生静态页面的路径
     
*/
    publicstaticvoid 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
     
*/
    publicstaticvoid 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";
        }
    }

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>
这样友情链接静态页就天生了。然后其他静态页依此葫芦画瓢。

总结:固然静态页访问速度快和其他的好处,但实现起来究竟仍是很麻烦了,维护也是一个麻烦事情。假如您的站点更新速度快那么就需要在你的后台数据更新部门调用相应的createHTML方法实时的天生静态页面。假如更新速度不慢可以在后台手动更新或者利用操纵系统的定时任务功能去执行你的静态页面天生程序
回复

使用道具 举报

  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-7-31 23:12:44 | 显示全部楼层
    谢谢楼主分享。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-24 01:27 , Processed in 0.399272 second(s), 53 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表