使用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");
}
相关推荐
创建一个 HttpClient 实例,这个实例需要调用 Dispose 方法释放资源,这里使用了 using 语句。接着调用 GetAsync,给它传递要调用的方法的地址,向服务器发送 Get 请求。