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

高性能Java Web 页面静态化技术(原创)的更多相关文章

  1. 高性能Java Web 页面静态化技术

    package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...

  2. php页面静态化技术;学习笔记

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 页面静态化技术Freemarker技术的介绍及使用实例.

    一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...

  4. java秒杀系列(2)- 页面静态化技术

    前言 通过代码片段分别介绍服务端渲染.客户端渲染.对象缓存三种方式的写法. 代码片段仅供参考,具体实现需要根据业务场景自行适配,但思想都是一样. 一.服务端渲染方式 1.接口返回html页面的设置 @ ...

  5. Freemarker页面静态化技术,activemq监听页面变动

    初步理解: 架构优化: 静态页面的访问速度优于从缓存获取数据的动态页面的访问速度: Freemarker: 导包 模板:hello.ftl <!DOCTYPE html> <html ...

  6. Freemarker 页面静态化技术使用入门案例

    在访问 新闻.活动.商品 详情页面时, 路径可以是 xx[id].html, 服务器端根据请求 id, 动态生成 html 网页,下次访问数据时,无需再查询数据,直接将 html 静态页面返回.这样一 ...

  7. Thymeleaf页面静态化技术

    Teymeleaf的使用 案例一:springboot搭建Thymeleaf 1.导入依赖 2.新建html页面模板 3.新建前端控制层Controller 4.新建启动类 1.导入依赖 <?x ...

  8. Django框架开发web网站的网页优化—页面静态化

    网站优化-页面静态化 1)概念 提前将页面所用到的数据从数据库查询出来,然后生成一个静态页面,之后用户来访问的时候,直接返回静态页面. 举例:首页静态化:获取首页用到的数据表中的数据,生成静态首页in ...

  9. 大型网站提速关键技术(页面静态化,memcached,MySql优化)(三)

    页面静态化的技术实现有两种方式 使用PHP自己的缓存机制 先说明一下OB缓存的机制. ob1.php 代码:说明的ob的各个用法->项目中 ☞ 如何打开ob缓存 ①     配置php.ini ...

随机推荐

  1. 【转】 UINavigationItem UINavigationBar 关系分析

    原文:http://blog.csdn.net/luoyeffcs/article/details/16106707 目录 1.关系分析 2.关系综述 3.概念点 4.疑问 1.关系分析 UIBarI ...

  2. cos-26上传

    在开发中常常需要上传文件,上传文件的方式有很多种,这里有一个cos实现的例子. 首先是要拷贝cos.jar包拷贝到WEB-INF/lib目录下,然后才进行编码. 创建一个可以进行自动重命名的Java文 ...

  3. applicationContext.xml详解(转)

    转自:http://blog.csdn.net/heng_ji/article/details/7022171,写的很好,省得以后找,放此处 想必用过Spring的程序员们都有这样的感觉,Spring ...

  4. TestNG Listener

    常用接口 IExecutionListener   监听TestNG运行的启动和停止. IAnnotationTransformer 注解转换器,用于TestNG测试类中的注解. ISuiteList ...

  5. Java compile时,提示 DeadCode的原因

    在工程编译时,编译器发现部分代码是无用代码,则会提示:某一行代码是DeadCode.今天compile工程的时候发现某一个循环出现这个问题,如下: public void mouseOver(fina ...

  6. JQuery 实现鼠标经过图片高亮显示,其余图片变暗

    效果图: 当鼠标经过图片时,其余图片变暗,来高亮显示当前图片,主要用的是对比度.当然你也可以先把其他图片默认变暗,鼠标经过时高亮显示,不过,无鼠标经过时整体图片都会是偏暗色调. 效果可以通过 三步实现 ...

  7. 80端口被占用 PID = 4解决办法

    请按照下面的步骤来运行命令:1. sc config http stat = demand2. reboot3. run the command(netsh http show servicestat ...

  8. [转]NodeJS、NPM安装配置步骤(windows版本)

    1.windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的“INSTALL” ...

  9. 从ipad相机相册读取相片并保存

    以下是从实际项目中截取的例子,从一个button中启动获得相片 -(IBAction)blumbtnTap:(id)sender { // 判断是否支持相机 // UIAlertView *alert ...

  10. Spark的RDD编程(二)公众号undefined110

    创建RDD有两种方式:①读取外部数据集,lines=sc.textFile("README.md").②对一个集合进行并行化,lines=sc.parallelize([" ...