您的位置:首页 > 编程语言 > Java开发

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

2016-12-26 11:45 183 查看
[java] view plain copy





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");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: