高性能Java Web 页面静态化技术(原创)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:36   1354   0
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");
  
 }

}




需要源码的可以发电子邮件:903055177@qq.com
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP