zoukankan      html  css  js  c++  java
  • 使用HTTPCLIENT生成静态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"); 
    }
  • 相关阅读:
    DFS染色解决区域分块问题UVALive 6663
    栈之逆波兰
    线段树总结
    区间合并问题
    线段树的开闭区间问题
    离散化
    线段树的学习过程
    BFS的小结
    状态数组哪家强
    卡特兰数。
  • 原文地址:https://www.cnblogs.com/chenying99/p/2603523.html
Copyright © 2011-2022 走看看