使用HTTPCLIENT去生成静态HTML页面

一般生成HTML页时,都会用比如freemarker等去搞,但今天看到和学到一个还应该

不错的方法,是使用httpclient的get方法,去读某个动态的URL,然后把读出的内容再保存成HTML的,下面例子介绍一下:

publicclassHtmlParser{

HttpClienthttpClient=null;//HttpClient实例

GetMethodgetMethod=null;//GetMethod实例

BufferedWriterfw=null;

Stringpage=null;

Stringwebappname=null;

BufferedReaderbr=null;

InputStreamin=null;

StringBuffersb=null;

Stringline=null;

//构造方法

publicHtmlGenerator(Stringwebappname){

this.webappname=webappname;

}

/**根据模版及参数产生静态页面*/

publicbooleancreateHtmlPage(Stringurl,StringhtmlFileName){

booleanstatus=false;

intstatusCode=0;

try{

//创建一个HttpClient实例充当模拟浏览器

httpClient=newHttpClient();

//设置httpclient读取内容时使用的字符集

httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"gbk");

//创建GET方法的实例

getMethod=newGetMethod(url);

//使用系统提供的默认的恢复策略,在发生异常时候将自动重试3次

getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,newDefaultHttpMethodRetryHandler());

//设置Get方法提交参数时使用的字符集,以支持中文参数的正常传递

getMethod.addRequestHeader("Content-Type","text/html;charset=gbk");

//执行Get方法并取得返回状态码,200表示正常,其它代码为异常

statusCode=httpClient.executeMethod(getMethod);

if(statusCode!=200){

logger.fatal("静态页面引擎在解析"+url+"产生静态页面"+htmlFileName+"时出错!");

}else{

//读取解析结果

sb=newStringBuffer();

in=getMethod.getResponseBodyAsStream();

br=newBufferedReader(newInputStreamReader(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(Exceptionex){

logger.fatal("静态页面引擎在解析"+url+"产生静态页面"+htmlFileName+"时出错:"+ex.getMessage());

}finally{

//释放http连接

getMethod.releaseConnection();

}

returnstatus;

}

//将解析结果写入指定的静态HTML文件中

privatesynchronizedvoidwriteHtml(StringhtmlFileName,Stringcontent)throwsException{

fw=newBufferedWriter(newFileWriter(htmlFileName));

fw.write(page);

if(fw!=null)fw.close();

}

//将页面中的相对路径替换成绝对路径,以确保页面资源正常访问

privateStringformatPage(Stringpage){

page=page.replaceAll("\\.\\./\\.\\./\\.\\./",webappname+"/");

page=page.replaceAll("\\.\\./\\.\\./",webappname+"/");

page=page.replaceAll("\\.\\./",webappname+"/");

returnpage;

}

//测试方法

publicstaticvoidmain(String[]args){

HtmlGeneratorh=newHtmlGenerator("");

h.createHtmlPage("http://www.abc.com/test.html","c:/abc.html");

}

相关推荐