高性能Java Web 页面静态化技术
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高性能Java Web 页面静态化技术相关的知识,希望对你有一定的参考价值。
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"); } }
<li class="alt"><span><span class="keyword">package</span><span> com.yancms.util; </span></span></li><li class=""><span> </span></li><li class="alt"><span><span class="keyword">import</span><span> java.io.*; </span></span></li><li class=""><span><span class="keyword">import</span><span> org.apache.commons.httpclient.*; </span></span></li><li class="alt"><span><span class="keyword">import</span><span> org.apache.commons.httpclient.methods.*; </span></span></li><li class=""><span><span class="keyword">import</span><span> org.apache.commons.httpclient.params.HttpMethodParams; </span></span></li><li class="alt"><span> </span></li><li class=""><span><span class="comment">/**</span> </span></li><li class="alt"><span><span class="comment"> * 静态页面引擎技术(突乱了乱码问题UTF-8)</span> </span></li><li class=""><span><span class="comment"> * @author 吴彦文</span> </span></li><li class="alt"><span><span class="comment"> *</span> </span></li><li class=""><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> HtmlGenerator </span><span class="keyword">extends</span><span> BaseLog { </span></span></li><li class=""><span> HttpClient httpClient = <span class="keyword">null</span><span>; </span><span class="comment">//HttpClient实例</span><span> </span></span></li><li class="alt"><span> GetMethod getMethod =<span class="keyword">null</span><span>; </span><span class="comment">//GetMethod实例</span><span> </span></span></li><li class=""><span> BufferedWriter fw = <span class="keyword">null</span><span>; </span></span></li><li class="alt"><span> String page = <span class="keyword">null</span><span>; </span></span></li><li class=""><span> String webappname = <span class="keyword">null</span><span>; </span></span></li><li class="alt"><span> BufferedReader br = <span class="keyword">null</span><span>; </span></span></li><li class=""><span> InputStream in = <span class="keyword">null</span><span>; </span></span></li><li class="alt"><span> StringBuffer sb = <span class="keyword">null</span><span>; </span></span></li><li class=""><span> String line = <span class="keyword">null</span><span>; </span></span></li><li class="alt"><span> <span class="comment">//构造方法</span><span> </span></span></li><li class=""><span> <span class="keyword">public</span><span> HtmlGenerator(String webappname){ </span></span></li><li class="alt"><span> <span class="keyword">this</span><span>.webappname = webappname; </span></span></li><li class=""><span> </span></li><li class="alt"><span> } </span></li><li class=""><span> </span></li><li class="alt"><span> <span class="comment">/** 根据模版及参数产生静态页面 */</span><span> </span></span></li><li class=""><span> <span class="keyword">public</span><span> </span><span class="keyword">boolean</span><span> createHtmlPage(String url,String htmlFileName){ </span></span></li><li class="alt"><span> <span class="keyword">boolean</span><span> status = </span><span class="keyword">false</span><span>; </span></span></li><li class=""><span> <span class="keyword">int</span><span> statusCode = </span><span class="number">0</span><span>; </span></span></li><li class="alt"><span> <span class="keyword">try</span><span>{ </span></span></li><li class=""><span> <span class="comment">//创建一个HttpClient实例充当模拟浏览器</span><span> </span></span></li><li class="alt"><span> httpClient = <span class="keyword">new</span><span> HttpClient(); </span></span></li><li class=""><span> <span class="comment">//设置httpclient读取内容时使用的字符集</span><span> </span></span></li><li class="alt"><span> httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,<span class="string">"UTF-8"</span><span>); </span></span></li><li class=""><span> <span class="comment">//创建GET方法的实例</span><span> </span></span></li><li class="alt"><span> getMethod = <span class="keyword">new</span><span> GetMethod(url); </span></span></li><li class=""><span> <span class="comment">//使用系统提供的默认的恢复策略,在发生异常时候将自动重试3次</span><span> </span></span></li><li class="alt"><span> getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, <span class="keyword">new</span><span> DefaultHttpMethodRetryHandler()); </span></span></li><li class=""><span> <span class="comment">//设置Get方法提交参数时使用的字符集,以支持中文参数的正常传递</span><span> </span></span></li><li class="alt"><span> getMethod.addRequestHeader(<span class="string">"Content-Type"</span><span>,</span><span class="string">"text/html;charset=UTF-8"</span><span>); </span></span></li><li class=""><span> <span class="comment">//执行Get方法并取得返回状态码,200表示正常,其它代码为异常</span><span> </span></span></li><li class="alt"><span> statusCode = httpClient.executeMethod(getMethod); </span></li><li class=""><span> <span class="keyword">if</span><span> (statusCode!=</span><span class="number">200</span><span>) { </span></span></li><li class="alt"><span> logger.fatal(<span class="string">"静态页面引擎在解析"</span><span>+url+</span><span class="string">"产生静态页面"</span><span>+htmlFileName+</span><span class="string">"时出错!"</span><span>); </span></span></li><li class=""><span> }<span class="keyword">else</span><span>{ </span></span></li><li class="alt"><span> <span class="comment">//读取解析结果</span><span> </span></span></li><li class=""><span> sb = <span class="keyword">new</span><span> StringBuffer(); </span></span></li><li class="alt"><span> in = getMethod.getResponseBodyAsStream(); </span></li><li class=""><span> <span class="comment">//br = new BufferedReader(new InputStreamReader(in));//此方法默认会乱码,经过长时期的摸索,下面的方法才可以</span><span> </span></span></li><li class="alt"><span> br = <span class="keyword">new</span><span> BufferedReader(</span><span class="keyword">new</span><span> InputStreamReader(in,</span><span class="string">"UTF-8"</span><span>)); </span></span></li><li class=""><span> <span class="keyword">while</span><span>((line=br.readLine())!=</span><span class="keyword">null</span><span>){ </span></span></li><li class="alt"><span> sb.append(line+<span class="string">"\n"</span><span>); </span></span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">if</span><span>(br!=</span><span class="keyword">null</span><span>)br.close(); </span></span></li><li class=""><span> page = sb.toString(); </span></li><li class="alt"><span> <span class="comment">//将页面中的相对路径替换成绝对路径,以确保页面资源正常访问</span><span> </span></span></li><li class=""><span> page = formatPage(page); </span></li><li class="alt"><span> <span class="comment">//将解析结果写入指定的静态HTML文件中,实现静态HTML生成</span><span> </span></span></li><li class=""><span> writeHtml(htmlFileName,page); </span></li><li class="alt"><span> status = <span class="keyword">true</span><span>; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> }<span class="keyword">catch</span><span>(Exception ex){ </span></span></li><li class=""><span> logger.fatal(<span class="string">"静态页面引擎在解析"</span><span>+url+</span><span class="string">"产生静态页面"</span><span>+htmlFileName+</span><span class="string">"时出错:"</span><span>+ex.getMessage()); </span></span></li><li class="alt"><span> }<span class="keyword">finally</span><span>{ </span></span></li><li class=""><span> <span class="comment">//释放http连接</span><span> </span></span></li><li class="alt"><span> getMethod.releaseConnection(); </span></li><li class=""><span> } </span></li><li class="alt"><span> <span class="keyword">return</span><span> status; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="comment">//将解析结果写入指定的静态HTML文件中</span><span> </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">synchronized</span><span> </span><span class="keyword">void</span><span> writeHtml(String htmlFileName,String content) </span><span class="keyword">throws</span><span> Exception{ </span></span></li><li class=""><span> fw = <span class="keyword">new</span><span> BufferedWriter(</span><span class="keyword">new</span><span> FileWriter(htmlFileName)); </span></span></li><li class="alt"><span> OutputStreamWriter fw = <span class="keyword">new</span><span> OutputStreamWriter(</span><span class="keyword">new</span><span> FileOutputStream(htmlFileName),</span><span class="string">"UTF-8"</span><span>); </span></span></li><li class=""><span> fw.write(page); </span></li><li class="alt"><span> <span class="keyword">if</span><span>(fw!=</span><span class="keyword">null</span><span>)fw.close(); </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="comment">//将页面中的相对路径替换成绝对路径,以确保页面资源正常访问</span><span> </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> String formatPage(String page){ </span></span></li><li class=""><span> page = page.replaceAll(<span class="string">"\\.\\./\\.\\./\\.\\./"</span><span>, webappname+</span><span class="string">"/"</span><span>); </span></span></li><li class="alt"><span> page = page.replaceAll(<span class="string">"\\.\\./\\.\\./"</span><span>, webappname+</span><span class="string">"/"</span><span>); </span></span></li><li class=""><span> page = page.replaceAll(<span class="string">"\\.\\./"</span><span>, webappname+</span><span class="string">"/"</span><span>); </span></span></li><li class="alt"><span> <span class="keyword">return</span><span> page; </span></span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span> <span class="comment">//测试方法</span><span> </span></span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> main(String[] args){ </span></span></li><li class=""><span> HtmlGenerator h = <span class="keyword">new</span><span> HtmlGenerator(</span><span class="string">"webappname"</span><span>); </span></span></li><li class="alt"><span> h.createHtmlPage(<span class="string">"http://localhost:8080/yanCms/three/three?parent_id=10&id=103&type=10"</span><span>,</span><span class="string">"c:/a.html"</span><span>); </span></span></li><li class=""><span> System.out.println(<span class="string">"静态页面已经生成到c:/a.html"</span><span>); </span></span></li><li class="alt"><span> </span></li><li class=""><span> } </span></li><li class="alt"><span> </span></li><li class=""><span>} </span></li>
以上是关于高性能Java Web 页面静态化技术的主要内容,如果未能解决你的问题,请参考以下文章