JAVA线程根据给定URL生成网页快照

最近项目中遇到这样一个需求,根据一个动态的URL来生成对应的网页快照。网上找了很多资料,最终采用如下方法解决。

生成原理:将动态URL的页面先生成HTML文件,然后再根据生成的HTML生成快照。生成的HTML中必须有值如:<div>test<div>,不能通过JS或JSON的方式给页面元素赋值,否则生成的(快照)图片会是空白的。

缺点:当点击按钮提交表单后,可能由于网络不畅通,造成请求超时从而造成生成快照失败;解决办法:可通过定时程序来生成图片解决此问题。

部分源码如下(附件中有完整源码):

 

/**
 * JAVA线程根据给定URL生成网页快照
 * User: GQ
 * Date: 13-10-31
 * Time: 下午10:45
 * To change this template use File | Settings | File Templates.
 */

import snapshot.model.Page;

import java.util.Timer;

public class Test {
    private TaskQueue<Page> queue;
    private Timer timer;

    protected void setUp() {
        queue = new TaskQueue<Page>();
        queue.put(new Page("微软", "http://www.microsoft.com/"));
        queue.put(new Page("MOP", "http://www.mop.com/"));
        queue.put(new Page("MSN", "http://www.msn.com/"));
        queue.put(new Page("阿里巴巴", "http://www.alibaba.com/"));
        queue.put(new Page("淘宝", "http://www.taobao.com/"));
        queue.put(new Page("百度", "http://www.baidu.com/"));
        queue.put(new Page("谷歌", "http://www.google.com/"));
        queue.put(new Page("腾讯", "http://www.qq.com/"));
        queue.put(new Page("新浪", "http://www.sina.com/"));
        queue.put(new Page("SPRING", "http://www.springframework.org/"));
        queue.put(new Page("网易", "http://www.163.com/"));
    }

    public void setRun() {
        timer = new Timer();
        SnapshotProcessorDeamon deamon = new SnapshotProcessorDeamon();
        deamon.setAvgmax(2);
        //File f = new File(this.getClass().getResource("/").getPath()); // 获取类加载的根路径 例如:D:/IdeaProjects/cdby_wan/WebRoot/WEB-INF/classes
        //deamon.setExec(f.toString().replaceAll("\\\\","/")+"/IECapt.exe");
        deamon.setExec("c:\\IECapt.exe");
        deamon.setMax(5);
        deamon.setImageRoot("c:/snapshot/");
        deamon.setTaskQueue(queue);
        deamon.setTime(1000l);
        deamon.setTimeout(20000l);
        timer.schedule(deamon, 10000, 10000);
        do {
            try {
                Thread.sleep(11000l);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        } while (deamon.getProcessorCount() > 0);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        System.out.println("开始时间:" + start);
        Test t = new Test();
        t.setUp();
        t.setRun();
        long end = System.currentTimeMillis();
        System.out.println("结束时间:" + end);
        System.out.println("花费时间:" + (end - start) / 1000 + "秒");
    }
}

 

根据动态URL生成HTML,请参考:http://gqsunrise.iteye.com/admin/blogs/1968228

 

你可能感兴趣的:(线程,根据给定URL生成网页快照)