欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java 项目生成静态页面的代码

程序员文章站 2024-02-17 20:43:22
不外乎有以下因素: 1、从页面加载时间来看:静态页面不需要与数据库建立连接,尤其是访问数据量较大的页面,这种页面大多要查很多结果集,因此建立连接次数就增多了,时间不可观,而...
不外乎有以下因素:
1、从页面加载时间来看:静态页面不需要与数据库建立连接,尤其是访问数据量较大的页面,这种页面大多要查很多结果集,因此建立连接次数就增多了,时间不可观,而静态页面则省去了这些时间。
2、从便于搜索引擎抓取的角度来讲:搜索引擎更喜欢静态的网页,静态网页与动态网页相比,搜索引擎更喜欢静的,更便于抓取,搜索引擎seo排名更容易提高,一些大门户站页面大多都采用静态或伪静态网页来显示,更便于搜索引擎抓取与排名。
3、从安全性来看:静态网页不宜遭到黑客攻击,因为黑客不知道你的网站的后台、网站采用程序、数据库的地址。
4、从稳定性来看:哪天数据库服务器挂了,动态网页就拜拜了!而要运行一个静态网页的发布服务器,相信大家都知道配置不是太高也行的吧?呵呵。

因此,我认为,生成静态页面具有可行性。

那么怎么把动态网页的代码生成静态网页呢?又存在哪呢?原理其实很简单。
1、利用freemark模板生成静态页面,网上搜一下大把大把的代码随你挑,我就不在这里啰嗦了。
我很讨厌这种方式,因为对于一个数据量较大的页面来讲工作量太大,要写模板,语法又比较怪异,不流行!
2、也是我偶尔想起来的。用java中urlconnection抓取某个url网页源码(这是原理核心)生成html文件,就是这么简单!就是这么easy!

代码奉上!

1)、以下是捕捉网页源码程序:
复制代码 代码如下:

import java.io.bufferedreader;
import java.io.file;
import java.io.ioexception;
import java.io.inputstreamreader;
import java.net.malformedurlexception;
import java.net.url;
import java.net.urlconnection;
import java.util.regex.matcher;
import java.util.regex.pattern;

import org.apache.commons.io.fileutils;
import org.apache.commons.lang.stringutils;

/**
* @author xing,xiudong
*/
public class htmlgenerator {

    public static final string generate(final string url) {
        if (stringutils.isblank(url)) {
            return null;
        }

        pattern pattern = pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
        matcher matcher = pattern.matcher(url);
        if (!matcher.find()) {
            return null;
        }

        stringbuffer sb = new stringbuffer();

        try {
            url _url = new url(url);
            urlconnection urlconnection = _url.openconnection();
            bufferedreader in = new bufferedreader(new inputstreamreader(urlconnection.getinputstream()));

            string inputline;
            while ((inputline = in.readline()) != null) {
                sb.append(inputline);
            }
        } catch (malformedurlexception e) {
            e.printstacktrace();
        } catch (ioexception e) {
            e.printstacktrace();
        }

        return sb.tostring();
    }

    /**
     * test code
     * target : http://www.google.cn/
     */
    public static void main(string[] args) throws ioexception {
        string src = htmlgenerator.generate("http://www.google.cn/");

        file file = new file("c:" + file.separator + "index.html");
        fileutils.writestringtofile(file, src, "utf-8");
    }

}

2)、将源码写入html文件,这个需要根据用户的需求了,我根据我项目中遇到的情况写了以下代码:
复制代码 代码如下:

    /**
     * generite html source code
     *
     * @author xing,xiudong
     * @date 2009.06.22
     * @param request
     * @param url
     * @param towebroot
     * @param encoding
     * @throws ioexception
     */
    public void genhtml(httpservletrequest request, string url, boolean towebroot, string encoding) throws ioexception {

        if (null == url) {
            url = request.getrequesturl().tostring();
        }

        string contextpath = request.getcontextpath();
        string seq = stringutils.substring(string.valueof(new date().gettime()), -6);

        string ctxpath = super.getservlet().getservletcontext().getrealpath(file.separator);
        if (!ctxpath.endswith(file.separator)) {
            ctxpath += file.separator;
        }

        string filepath = stringutils.substringafter(url, contextpath);
        filepath = filepath.replaceall("\\.(do|jsp|html|shtml)$", ".html");

        string savepath = "";
        string autocreateddatedir = "";
        if (!towebroot) {
            savepath = stringutils.join(new string[] { "files", "history", "" }, file.separator);

            string[] folderpatterns = new string[] { "yyyy", "mm", "dd", "" };
            autocreateddatedir = dateformatutils.format(new date(), stringutils.join(folderpatterns, file.separator));

            filepath = stringutils.substringbefore(filepath, ".html") + "-" + seq + ".html";
        }

        file file = new file(ctxpath + savepath + autocreateddatedir + filepath);
        fileutils.writestringtofile(file, htmlgenerator.generate(url), encoding);
    }

来源: