`
dengwenwei121
  • 浏览: 40989 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
文章分类
社区版块
存档分类
最新评论

高性能 java web页面静态化使用httpclient生成静态页面

 
阅读更多
package com.wwxl.util; 
 
import java.io.*; 

import org.apache.commons.httpclient.*; 
import org.apache.commons.httpclient.methods.*; 
import org.apache.commons.httpclient.params.HttpMethodParams; 
import org.apache.log4j.Logger;
 
/**
 * 静态页面引擎技术
 * @author 邓文伟
 *
 */ 
public class HtmlGenerator{ 
    private Logger logger = Logger.getLogger(HtmlGenerator.class);
    HttpClient httpClient = null; //HttpClient实例  
    GetMethod getMethod =null; //GetMethod实例  
    String page = null;
    String webappname = null;
    BufferedWriter fw = 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,"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 page) 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://www.baidu.com","c:/a.html"); 
        System.out.println("静态页面已经生成到c:/a.html"); 
         
    } 
} 
添加pom依赖
               <dependency>
			<groupId>commons-httpclient</groupId>
			<artifactId>commons-httpclient</artifactId>
			<version>3.1</version>
		</dependency>
<!-- log4j -->
  <dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
  </dependency>


分享到:
评论

相关推荐

    java高并发解决方案

    CMS能够自动生成静态页面,支持频道管理、权限控制和自动化功能。对于社区网站,实时静态化帖子和文章可以显著提高性能,如MOP的大杂烩和网易社区采用的就是这种方法。此外,对于数据库查询频繁但更新较少的应用场景...

    web页面缓存[文].pdf

    在Web开发中,页面缓存是一种优化网站性能的技术,它减少了服务器处理请求的负担和网络传输的数据量,从而提高了用户访问速度。此PDF文档中提到的实现方式是基于JSP和Java的简单缓存机制。 首先,我们看到JSP页面...

    java 调用 webService工具类

    对于高性能应用,可能会采用异步调用来避免阻塞主线程。Java的CompletableFuture或者ExecutorService可以用来实现非阻塞调用。 10. **测试与调试**: 工具类应包含方便测试的特性,如日志记录、模拟响应、断点...

    Java爬虫汽车之家图片

    - **WebMagic**:一个简单易用的Java爬虫框架,支持自动化的页面解析和数据提取。 - **Colt**:用于大数据处理,可以辅助处理大量抓取的数据。 3. **爬虫步骤**: - **URL管理**:确定需要爬取的网址,可能需要...

    java常用api文档前端相关

    5. **模板引擎**: Java有Velocity、Freemarker等模板引擎,它们允许开发者将静态HTML与动态数据结合,生成最终的网页。前端开发者需了解如何编写模板语言,以及如何通过Java后端传递数据到模板。 6. **安全API**: ...

    搜索网页采集网络爬虫java源代码

    6. **延迟加载与动态内容处理**:现代网页常常使用JavaScript进行动态加载,这意味着部分内容可能在页面加载后由JavaScript生成。为了处理这种情况,可以使用如Selenium这样的浏览器自动化工具,模拟真实用户的交互...

    java多文件上传

    在Java编程中,多文件上传是一项常见的功能,尤其在web应用程序中,用户可能需要上传一组相关的文件,如图片、文档等。本示例主要涉及如何在Java环境下实现多文件上传,包括使用Struts框架以及直接使用HTTP的POST...

    JAVA开源软件分类

    - **C3P0**:一种高性能的数据库连接池管理器。 - **P2:数据库管理工具** - **DBEdit/DBExplorer**:用于数据库设计和管理。 - **P2:数据库驱动** - **HSQLDB**:一款轻量级的嵌入式数据库。 #### 6. Java开发...

    ssi整合jar

    总的来说,"ssi整合jar"是将SSI功能集成到Java环境中的一个工具,它使得开发者可以利用SSI在Java应用中创建动态的、半静态的网页内容。理解其工作原理和使用方法对于提升Web应用的灵活性和效率具有重要意义。

    Java工程师面试宝典

    `HashMap` 基于哈希表实现,提供高性能的增删改查操作;`TreeMap` 提供基于红黑树的键排序。 ##### 1.2 IO - **输入/输出流**:Java IO 框架由一系列流组成,分为输入流和输出流。主要包括 `InputStream`、`...

    HTML解析器 jsoup资料

    - 在Web开发中,它也可以用于服务器端生成静态页面,或者作为前端JavaScript的补充,处理动态生成的内容。 8. **性能和内存管理** - jsoup的设计考虑了性能,其内存效率高,适合处理大型HTML文档。 - 但是,处理...

    apache工具包详细解释

    14. **Apache Cassandra**:是一个高性能、分布式的NoSQL数据库,用于存储大规模数据集,适用于实时读写操作。 15. **Apache Kafka**:消息队列系统,用于构建实时数据管道和流应用,提供高吞吐量、低延迟的消息...

    Java_Utils:Java常见工具类以及一些优雅的代码技巧(持续更新)

    8. **代码性能优化**:Java_Utils可能包含了针对CPU、内存、IO等方面的性能优化技巧,比如避免空对象检查、减少对象创建、缓存策略等。 9. **枚举与常量管理**:枚举在Java中是安全的常量容器,项目可能提供了一套...

    基于SpringBoot + Vue +百度AI人脸识别接口的信息技术工坊签到系统

    2. **Vue.js**: Vue.js是一款轻量级的前端JavaScript框架,以其易用性、灵活性和高性能而受到开发者喜爱。Vue.js通过声明式渲染、组件化开发,使得构建用户界面更加简洁。在这个签到系统中,Vue.js用于构建用户友好...

    黑马面试宝典知识点复习

    - **Nginx优点**:更轻量级、低内存占用、高性能处理静态文件、更好的负载均衡能力。 - **Apache优点**:强大的模块扩展性、支持更多动态内容处理。 #### Httpclient - **定义**:用于发送HTTP请求和接收HTTP响应...

    treinamento-java-angular:Desafio Treinamento JavaAngular 2021年

    5. **CLI工具**:Angular CLI(命令行界面)的使用,用于快速生成组件、服务、管道等,并进行构建和测试。 6. **测试**:单元测试和端到端测试的实践,使用 Jasmine 和 Karma 测试框架。 7. **Git版本控制**:如何...

    SpringMVCAngular

    《Spring MVC与Angular深度整合详解》 在现代Web开发中,Spring MVC作为Java后端的主要框架,而...在实际项目中,开发者需要理解这两者的核心概念,并熟练掌握它们的集成技巧,才能构建出高性能、易于维护的Web应用。

Global site tag (gtag.js) - Google Analytics