高性能Java Web 页面静态化技术(原创)
2013-06-19 08:52
232 查看
package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache.commons.httpclient.methods.*; import org.apache.commons.httpclient.params.HttpMethodParams; /** * 静态页面引擎技术(突乱了乱码问题UTF-8) * @author 吴彦文 * */ public class HtmlGenerator extends BaseLog { 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,"UTF-8"); //创建GET方法的实例 getMethod = new GetMethod(url); //使用系统提供的默认的恢复策略,在发生异常时候将自动重试3次 getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); //设置Get方法提交参数时使用的字符集,以支持中文参数的正常传递 getMethod.addRequestHeader("Content-Type","text/html;charset=UTF-8"); //执行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));//此方法默认会乱码,经过长时期的摸索,下面的方法才可以 br = new BufferedReader(new InputStreamReader(in,"UTF-8")); 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)); OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(htmlFileName),"UTF-8"); 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("webappname"); h.createHtmlPage("http://localhost:8080/yanCms/three/three?parent_id=10&id=103&type=10","c:/a.html"); System.out.println("静态页面已经生成到c:/a.html"); } }
相关文章推荐
- 高性能Java Web 页面静态化技术(原创)
- 高性能Java Web 页面静态化技术
- 高性能Java Web 页面静态化技术
- 高性能Java Web 页面静态化技术
- 高性能 java web页面静态化使用httpclient生成静态页面
- 高性能Java Web 页面静态化实例
- 高性能 java web页面静态化使用httpclient生成静态页面
- PHP文件缓存技术之页面静态化
- Java web----页面静态化
- 页面静态化技术velocity与freemarker比较
- 使PHP页面静态化技术,php动态页面转html静态页面
- 【原创】构建高性能ASP.NET站点之一 剖析页面的处理过程(前端)
- velocity技术实现页面静态化
- PHP页面静态化技术(备忘)
- 各种系统性能优化技术,采用vilocity实现商品页面静态化
- 【原创】构建高性能ASP.NET站点之一 剖析页面的处理过程(前端)
- 页面静态化3 --- 伪静态技术之Apache的rewrite机制
- 高性能页面加载技术(流水线加载)BigPipe的C#简单实现(附源码)
- 五,伪静态技术实现页面静态化