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>
分享到:
相关推荐
CMS能够自动生成静态页面,支持频道管理、权限控制和自动化功能。对于社区网站,实时静态化帖子和文章可以显著提高性能,如MOP的大杂烩和网易社区采用的就是这种方法。此外,对于数据库查询频繁但更新较少的应用场景...
在Web开发中,页面缓存是一种优化网站性能的技术,它减少了服务器处理请求的负担和网络传输的数据量,从而提高了用户访问速度。此PDF文档中提到的实现方式是基于JSP和Java的简单缓存机制。 首先,我们看到JSP页面...
对于高性能应用,可能会采用异步调用来避免阻塞主线程。Java的CompletableFuture或者ExecutorService可以用来实现非阻塞调用。 10. **测试与调试**: 工具类应包含方便测试的特性,如日志记录、模拟响应、断点...
- **WebMagic**:一个简单易用的Java爬虫框架,支持自动化的页面解析和数据提取。 - **Colt**:用于大数据处理,可以辅助处理大量抓取的数据。 3. **爬虫步骤**: - **URL管理**:确定需要爬取的网址,可能需要...
5. **模板引擎**: Java有Velocity、Freemarker等模板引擎,它们允许开发者将静态HTML与动态数据结合,生成最终的网页。前端开发者需了解如何编写模板语言,以及如何通过Java后端传递数据到模板。 6. **安全API**: ...
6. **延迟加载与动态内容处理**:现代网页常常使用JavaScript进行动态加载,这意味着部分内容可能在页面加载后由JavaScript生成。为了处理这种情况,可以使用如Selenium这样的浏览器自动化工具,模拟真实用户的交互...
在Java编程中,多文件上传是一项常见的功能,尤其在web应用程序中,用户可能需要上传一组相关的文件,如图片、文档等。本示例主要涉及如何在Java环境下实现多文件上传,包括使用Struts框架以及直接使用HTTP的POST...
- **C3P0**:一种高性能的数据库连接池管理器。 - **P2:数据库管理工具** - **DBEdit/DBExplorer**:用于数据库设计和管理。 - **P2:数据库驱动** - **HSQLDB**:一款轻量级的嵌入式数据库。 #### 6. Java开发...
总的来说,"ssi整合jar"是将SSI功能集成到Java环境中的一个工具,它使得开发者可以利用SSI在Java应用中创建动态的、半静态的网页内容。理解其工作原理和使用方法对于提升Web应用的灵活性和效率具有重要意义。
`HashMap` 基于哈希表实现,提供高性能的增删改查操作;`TreeMap` 提供基于红黑树的键排序。 ##### 1.2 IO - **输入/输出流**:Java IO 框架由一系列流组成,分为输入流和输出流。主要包括 `InputStream`、`...
- 在Web开发中,它也可以用于服务器端生成静态页面,或者作为前端JavaScript的补充,处理动态生成的内容。 8. **性能和内存管理** - jsoup的设计考虑了性能,其内存效率高,适合处理大型HTML文档。 - 但是,处理...
14. **Apache Cassandra**:是一个高性能、分布式的NoSQL数据库,用于存储大规模数据集,适用于实时读写操作。 15. **Apache Kafka**:消息队列系统,用于构建实时数据管道和流应用,提供高吞吐量、低延迟的消息...
8. **代码性能优化**:Java_Utils可能包含了针对CPU、内存、IO等方面的性能优化技巧,比如避免空对象检查、减少对象创建、缓存策略等。 9. **枚举与常量管理**:枚举在Java中是安全的常量容器,项目可能提供了一套...
2. **Vue.js**: Vue.js是一款轻量级的前端JavaScript框架,以其易用性、灵活性和高性能而受到开发者喜爱。Vue.js通过声明式渲染、组件化开发,使得构建用户界面更加简洁。在这个签到系统中,Vue.js用于构建用户友好...
- **Nginx优点**:更轻量级、低内存占用、高性能处理静态文件、更好的负载均衡能力。 - **Apache优点**:强大的模块扩展性、支持更多动态内容处理。 #### Httpclient - **定义**:用于发送HTTP请求和接收HTTP响应...
5. **CLI工具**:Angular CLI(命令行界面)的使用,用于快速生成组件、服务、管道等,并进行构建和测试。 6. **测试**:单元测试和端到端测试的实践,使用 Jasmine 和 Karma 测试框架。 7. **Git版本控制**:如何...
《Spring MVC与Angular深度整合详解》 在现代Web开发中,Spring MVC作为Java后端的主要框架,而...在实际项目中,开发者需要理解这两者的核心概念,并熟练掌握它们的集成技巧,才能构建出高性能、易于维护的Web应用。