高性能 java web页面静态化使用httpclient生成静态页面

[java]  view plain copy print ?
  1. package com.wwxl.util;   
  2.    
  3. import java.io.*;   
  4.   
  5. import org.apache.commons.httpclient.*;   
  6. import org.apache.commons.httpclient.methods.*;   
  7. import org.apache.commons.httpclient.params.HttpMethodParams;   
  8. import org.apache.log4j.Logger;  
  9.    
  10. /** 
  11.  * 静态页面引擎技术 
  12.  * @author 邓文伟 
  13.  * 
  14.  */   
  15. public class HtmlGenerator{   
  16.     private Logger logger = Logger.getLogger(HtmlGenerator.class);  
  17.     HttpClient httpClient = null//HttpClient实例    
  18.     GetMethod getMethod =null//GetMethod实例    
  19.     String page = null;  
  20.     String webappname = null;  
  21.     BufferedWriter fw = null;    
  22.     BufferedReader br = null;   
  23.     InputStream in = null;   
  24.     StringBuffer sb = null;   
  25.     String line = null;     
  26.     //构造方法  
  27.     public HtmlGenerator(String webappname){  
  28.      this.webappname = webappname;  
  29.        
  30.     }  
  31.     /** 根据模版及参数产生静态页面 */   
  32.     public  boolean createHtmlPage(String url,String htmlFileName){   
  33.         boolean status = false;    
  34.         int statusCode = 0;                
  35.         try{   
  36.             //创建一个HttpClient实例充当模拟浏览器    
  37.             httpClient = new HttpClient();   
  38.             //设置httpclient读取内容时使用的字符集    
  39.             httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"UTF-8");            
  40.             //创建GET方法的实例    
  41.             getMethod = new GetMethod(url);   
  42.             //使用系统提供的默认的恢复策略,在发生异常时候将自动重试3次    
  43.             getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());   
  44.             //设置Get方法提交参数时使用的字符集,以支持中文参数的正常传递    
  45.             getMethod.addRequestHeader("Content-Type","text/html;charset=UTF-8");   
  46.             //执行Get方法并取得返回状态码,200表示正常,其它代码为异常    
  47.             statusCode = httpClient.executeMethod(getMethod);              
  48.             if (statusCode!=200) {   
  49.                 logger.fatal("静态页面引擎在解析"+url+"产生静态页面"+htmlFileName+"时出错!");   
  50.             }else{   
  51.                 //读取解析结果    
  52.                 sb = new StringBuffer();   
  53.                 in = getMethod.getResponseBodyAsStream();   
  54.                 br = new BufferedReader(new InputStreamReader(in,"UTF-8"));   
  55.                 while((line=br.readLine())!=null){   
  56.                     sb.append(line+"\n");   
  57.                 }   
  58.                 if(br!=null)br.close();   
  59.                 page = sb.toString();  
  60.                 //将页面中的相对路径替换成绝对路径,以确保页面资源正常访问  
  61.                 page = formatPage(page);  
  62.                 //将解析结果写入指定的静态HTML文件中,实现静态HTML生成    
  63.                 writeHtml(htmlFileName,page);   
  64.                 status = true;   
  65.             }              
  66.         }catch(Exception ex){   
  67.             logger.fatal("静态页面引擎在解析"+url+"产生静态页面"+htmlFileName+"时出错:"+ex.getMessage());            
  68.         }finally{   
  69.             //释放http连接    
  70.             getMethod.releaseConnection();   
  71.         }   
  72.         return status;   
  73.     }   
  74.        
  75.     //将解析结果写入指定的静态HTML文件中    
  76.     private synchronized void writeHtml(String htmlFileName,String page) throws Exception{    
  77.         fw = new BufferedWriter(new FileWriter(htmlFileName));   
  78.         OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(htmlFileName),"UTF-8");   
  79.         fw.write(page);    
  80.         if(fw!=null)fw.close();        
  81.     }   
  82.   //将页面中的相对路径替换成绝对路径,以确保页面资源正常访问  
  83.     private String formatPage(String page){    
  84.      page = page.replaceAll("\\.\\./\\.\\./\\.\\./", webappname+"/");  
  85.      page = page.replaceAll("\\.\\./\\.\\./", webappname+"/");  
  86.      page = page.replaceAll("\\.\\./", webappname+"/");     
  87.      return page;  
  88.     }  
  89.   //测试方法    
  90.     public static void main(String[] args){   
  91.         HtmlGenerator h = new HtmlGenerator("webappname");   
  92.         h.createHtmlPage("http://www.baidu.com","c:/a.html");   
  93.         System.out.println("静态页面已经生成到c:/a.html");   
  94.            
  95.     }   
  96. }   
[html]  view plain copy print ?
  1. 添加pom依赖  
  2.                <dependency>  
  3.             <groupId>commons-httpclient</groupId>  
  4.             <artifactId>commons-httpclient</artifactId>  
  5.             <version>3.1</version>  
  6.         </dependency>  
  7. <!-- log4j -->  
  8.         <dependency>  
  9.             <groupId>log4j</groupId>  
  10.             <artifactId>log4j</artifactId>  
  11.             <version>1.2.17</version>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值