`

使用HTTPCLIENT生成静态HTML页面(转)

 
阅读更多

http://www.cnblogs.com/chenying99/archive/2012/07/22/2603523.html

 

一般生成HTML页时,都会用比如freemarker等去搞,但今天看到和学到一个还应该 
不错的方法,是使用httpclient的get方法,去读某个动态的URL,然后把读出的内容再保存成HTML的,下面例子介绍一下: 
public class HtmlParser { 
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,"gbk");
//创建GET方法的实例 
getMethod = new GetMethod(url); 
//使用系统提供的默认的恢复策略,在发生异常时候将自动重试3次 
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); 
//设置Get方法提交参数时使用的字符集,以支持中文参数的正常传递 
getMethod.addRequestHeader("Content-Type","text/html;charset=gbk"); 
//执行Get方法并取得返回状态码,200表示正常,其它代码为异常 
statusCode = httpClient.executeMethod(getMethod);
if (statusCode!=200) { 
logger.fatal("静态页面引擎在解析"+url+"产生静态页面"+htmlFileName+"时出错!"); 
}else{ 
//读取解析结果 
sb = new StringBuffer(); 
in = getMethod.getResponseBodyAsStream(); 
br = new BufferedReader(new InputStreamReader(in)); 
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){ 
logger.fatal("静态页面引擎在解析"+url+"产生静态页面"+htmlFileName+"时出错:"+ex.getMessage());
        }finally{ 
        //释放http连接 
        getMethod.releaseConnection(); 
        } 
return status; 


//将解析结果写入指定的静态HTML文件中 
private synchronized void writeHtml(String htmlFileName,String content) throws Exception{ 
fw = new BufferedWriter(new FileWriter(htmlFileName)); 
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://www.abc.com/test.html","c:/abc.html"); 
}
分享到:
评论

相关推荐

    彻底解决httpClient乱码问题

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

    httpclient 静态化网站 project

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

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

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

    java生成静态页面的思路

    要使用Java生成静态页面,我们通常需要以下步骤: 1. **数据获取**:首先,我们需要获取用于生成页面的数据。这可能来自于数据库、API接口、文件或任何其他数据源。Java提供了丰富的库,如JDBC用于数据库操作,或者...

    httpclient,freemarker的静态化分页

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

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

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

    .net生成静态页源码

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

    一个生成静态的例子

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

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

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

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

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

    HttpClient以及获取页面内容应用

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

    自动生成HTML工具

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

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

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

    frameHtml

    `frameHtml`项目是一个使用Java的HttpClient库实现的网络抓取示例,它可以帮助开发者了解如何生成静态页面。在这个教程中,我们将深入探讨HttpClient库、静态页面的生成以及相关的Java编程知识。 HttpClient是一个...

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

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

    c#html转word

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

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

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

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

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

    C#获取静态源码的程序

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

    C#实现web信息自动抓取

    这可能涉及将抓取的数据转换为Markdown、XML、JSON等格式,或者利用模板引擎(如Razor或Nustache)生成HTML页面。 总结起来,C#实现Web信息自动抓取主要涉及以下步骤: 1. 分析目标网站结构,确定抓取规则。 2. ...

Global site tag (gtag.js) - Google Analytics