`

HttpClient生成静态HTML页面

阅读更多

一般生成HTML页时,都会用freemarker,但是每次都要编写模板文件,有时根据项目需求使用它略显麻烦。这里使用httpclient的get方法,去读某个动态的URL,然后把读出的内容再保存成HTML的,下面例子介绍一下:

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

import java.io.*;

/**
 * Created with GQ.
 * User: Administrator
 * Date: 13-11-1
 * Time: 下午1:52
 */
public class HtmlGenerator {
    HttpClient httpClient = null; //HttpClient实例
    GetMethod getMethod = null; //GetMethod实例
    BufferedWriter fw = null;
    String page = null;
    String webappname = null;
    BufferedReader br = null;
    InputStream in = null;
    StringBuffer sb = null;
    String line = null;

    //构造方法
    public HtmlGenerator(String webappname) {
        this.webappname = webappname;
    }

    /**
     * 根据模版及参数产生静态页面
     */
    public boolean createHtmlPage(String url, String htmlFileName) {
        boolean status = false;
        int statusCode = 0;
        try {
            //创建一个HttpClient实例充当模拟浏览器
            httpClient = new HttpClient();
            //设置httpclient读取内容时使用的字符集
            httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
            //创建GET方法的实例
            getMethod = new GetMethod(url);
            //使用系统提供的默认的恢复策略,在发生异常时候将自动重试3次
            getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
            //设置Get方法提交参数时使用的字符集,以支持中文参数的正常传递
            getMethod.addRequestHeader("Content-Type", "text/html;charset=UTF-8");
            //执行Get方法并取得返回状态码,200表示正常,其它代码为异常
            statusCode = httpClient.executeMethod(getMethod);
            if (statusCode != 200) {
                System.out.println("静态页面引擎在解析" + url + "产生静态页面" + htmlFileName + "时出错!");
            } else {
                //读取解析结果
                sb = new StringBuffer();
                in = getMethod.getResponseBodyAsStream();
                br = new BufferedReader(new InputStreamReader(in,"UTF-8")); 
                while ((line = br.readLine()) != null) {
                     sb.append(line + "\n");
                }
                if (br != null) br.close();
                page = sb.toString();
                //将页面中的相对路径替换成绝对路径,以确保页面资源正常访问
                page = formatPage(page);
                //将解析结果写入指定的静态HTML文件中,实现静态HTML生成
                writeHtml(htmlFileName, page);
                status = true;
            }
        } catch (Exception ex) {
            System.out.println("静态页面引擎在解析" + url + "产生静态页面" + htmlFileName + "时出错:" + ex.getMessage());
        } finally {
            //释放http连接
            getMethod.releaseConnection();
        }
        return status;
    }

    //将解析结果写入指定的静态HTML文件中
    private synchronized void writeHtml(String htmlFileName, String content) throws Exception {
        // 指定生成文件的编码方式为UTF-8,避免中文乱码
        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFileName),"UTF-8")));
        // fw = new BufferedWriter(new FileWriter(htmlFileName)); 此方法生成的文件编码格式为:ANSI,会导致中文乱码(另存为文件时可查看具体编码格式)
        fw = new BufferedWriter(out);
        fw.write(page);
        if (fw != null) fw.close();
    }

    //将页面中的相对路径替换成绝对路径,以确保页面资源正常访问
    private String formatPage(String page) {
        page = page.replaceAll("\\.\\./\\.\\./\\.\\./", webappname + "/");
        page = page.replaceAll("\\.\\./\\.\\./", webappname + "/");
        page = page.replaceAll("\\.\\./", webappname + "/");
        return page;
    }

    //测试方法
    public static void main(String[] args) {
        HtmlGenerator h = new HtmlGenerator("");
        h.createHtmlPage("http://localhost:8098/app/common/reg.jsp", "c:/reg.html");
    }

}

 

分享到:
评论

相关推荐

    httpclient 静态化网站 project

    2. **网站静态化**:静态化是将动态生成的网页转化为静态HTML文件的过程。这通常通过爬虫程序实现,抓取网页内容后保存为静态文件。静态化的好处包括更快的加载速度、更少的服务器资源消耗、更好的SEO性能。 3. **...

    彻底解决httpClient乱码问题

    5. **静态化处理**:在处理HTML页面时,静态化是一种常见的技术,它将动态内容转化为静态HTML,以便于缓存和提高访问速度。HttpClient在静态化过程中,需要正确解析HTML中的编码信息,以避免在保存或展示时出现乱码...

    asp.net 远程抓取数据生成静态页面Demo

    4. 生成HTML:根据抓取的数据构造静态HTML页面的结构。 5. 写入文件:使用StreamWriter将生成的HTML写入本地文件系统。 在实际应用中,可能还需要考虑异常处理、缓存策略、多线程抓取以提高效率、以及遵守网站的...

    java生成静态页面的思路

    它们允许我们将数据插入到预定义的HTML模板中,生成最终的HTML页面。模板引擎通常支持条件语句、循环和变量,使得页面生成更加灵活。 3. **页面渲染**:使用模板引擎,我们可以将数据和模板结合,生成HTML字符串。...

    httpclient,freemarker的静态化分页

    当获取到`httpclient`请求的数据后,这些数据会被填充到模板中,生成最终的静态HTML页面。`freemarker`的语法简洁,支持条件判断、循环、变量操作等,使得动态数据的渲染变得非常灵活。 实现静态化分页的步骤通常...

    Java爬虫Jsoup+httpclient获取动态生成的数据

    在本例中,我们通过Jsoup获取到了京东商品页面的静态HTML代码,但价格信息并未包含在内。通过分析页面源码发现,商品价格是通过JavaScript异步调用接口填充的。通过观察接口的URL结构,我们可以发现,其中包含了商品...

    .net生成静态页源码

    在.NET框架中,生成静态页源码是一种常见的优化网站性能的技术。它涉及到将动态生成的网页转换为HTML文件,这些文件可以直接由Web服务器提供,而无需每次请求时都执行服务器端的代码。这种方式减少了服务器的负载,...

    一个生成静态的例子

    标题中的“一个生成静态的例子”指的是使用编程语言(如C#)来创建静态网页或静态化网站的过程。在IT行业中,生成静态意味着将动态内容转化为HTML等静态格式,以提高网站加载速度、优化SEO(搜索引擎优化)并降低...

    自动生成HTML工具

    【自动生成HTML工具】是一种利用编程语言,如C#,创建的应用程序,旨在自动化生成静态HTML页面的过程。这种工具的主要功能是从指定的URL抓取网页内容,并将其保存为本地的HTML文件,使得用户无需在线访问即可查看...

    Asp.net 静态化思路第三种实现

    静态化可以将原本动态生成的HTML页面转化为静态HTML文件,减少服务器处理负担,加快页面加载速度,对用户和搜索引擎都有积极影响。本文将详细介绍第三种Asp.net页面静态化的实现思路,即基于网页抓取技术。 首先,...

    frameHtml

    在`frameHtml`项目中,可能会利用Jsoup来解析从HttpClient获取的HTML内容,然后根据需求生成静态页面文件。 此外,标签中提到了"教程",这表明`frameHtml`可能包含了一个逐步的指南,指导开发者如何使用HttpClient...

    HttpClient以及获取页面内容应用

    通过一个URLConnection或者一个保存有网页内容的字符串来初始化Parser,或者使用静态函数来生成一个Parser对象。 ParserFeedback的代码很简单,是针对调试和跟踪分析过程的,一般不需要改变。而使用Lexer???? ...

    C#实现HTML页面转jpg图片格式

    本项目名为"C#实现HTML页面转jpg图片格式",主要目标是通过输入任意的网页链接,在本地指定文件夹生成对应的jpg格式网页截图,同时解决可能出现的白屏问题。 首先,我们需要理解HTML页面的本质,它是一种基于文本的...

    Asp.net生成html文件源码(模板和Url)

    在Asp.net开发中,生成HTML文件是一种常见的需求,例如用于静态化网页、生成报表或者构建电子邮件模板等。本文将详细讲解如何利用Asp.net的强大力量来生成HTML文件,包括基于模板和URL的方式。 首先,让我们了解...

    资源前后端分离式分布式微服务架构项目CMS页面静态化讲义+源码+视频

    - **定义**:页面静态化是指将动态生成的网页转化为静态HTML页面的过程,通常用于提高网站访问速度、降低服务器负载。 - **流程图**:页面静态化一般包括以下几个步骤: - 用户请求动态页面。 - 后端生成动态内容...

    针对 httpclient4.* 绕验证码获取公司信息 包括 jsoup网页信息的爬虫及htmlUnit对动态网站信息的抓取

    本主题主要关注如何使用`httpclient4.*`库来绕过验证码获取公司信息,以及结合`jsoup`解析静态网页信息和`htmlUnit`处理动态网站的抓取。以下是对这些知识点的详细说明: 1. **httpclient4.***: Apache HttpClient...

    html转换pdf 页面抓取内容,分页进行处理,后台进行处理,功能效果不错

    3. **分页处理**:HTML页面可能很长,转换为PDF时需要考虑如何分页。这通常依赖于转换工具的实现。例如,iText和Flying Saucer等库支持在转换过程中自动分页,根据设定的纸张大小和边距进行内容布局。 4. **样式...

    C#获取静态源码的程序

    静态网页的内容在服务器端就已经生成,当用户请求时,服务器直接发送HTML源码到客户端。而动态网页则根据用户请求和服务器端的数据实时生成内容。对于静态网页的抓取,我们无需处理JavaScript执行或Ajax异步请求,...

    C# 获取js执行之后的网页源代码(使用线程并设置超时功能)_20200712_140337.rar

    在C#编程中,有时我们需要获取网页的源代码,但有些网页的内容是通过JavaScript动态生成的,单纯使用HttpClient或WebClient等方法无法获取到完整的HTML,因为它们不会执行页面上的JavaScript代码。在这种情况下,...

    c#html转word

    对于含有JavaScript的HTML,可能需要在转换前先进行预处理,例如使用像JsRender或Puppeteer这样的库来渲染页面并获取最终的静态HTML。 描述中还提到"**如果其中有图片最好事先截图再将html分割放入**"。这是因为...

Global site tag (gtag.js) - Google Analytics