高性能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");
- }
- }
高性能Java Web 页面静态化技术(原创)的更多相关文章
- 高性能Java Web 页面静态化技术
package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...
- php页面静态化技术;学习笔记
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 页面静态化技术Freemarker技术的介绍及使用实例.
一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...
- java秒杀系列(2)- 页面静态化技术
前言 通过代码片段分别介绍服务端渲染.客户端渲染.对象缓存三种方式的写法. 代码片段仅供参考,具体实现需要根据业务场景自行适配,但思想都是一样. 一.服务端渲染方式 1.接口返回html页面的设置 @ ...
- Freemarker页面静态化技术,activemq监听页面变动
初步理解: 架构优化: 静态页面的访问速度优于从缓存获取数据的动态页面的访问速度: Freemarker: 导包 模板:hello.ftl <!DOCTYPE html> <html ...
- Freemarker 页面静态化技术使用入门案例
在访问 新闻.活动.商品 详情页面时, 路径可以是 xx[id].html, 服务器端根据请求 id, 动态生成 html 网页,下次访问数据时,无需再查询数据,直接将 html 静态页面返回.这样一 ...
- Thymeleaf页面静态化技术
Teymeleaf的使用 案例一:springboot搭建Thymeleaf 1.导入依赖 2.新建html页面模板 3.新建前端控制层Controller 4.新建启动类 1.导入依赖 <?x ...
- Django框架开发web网站的网页优化—页面静态化
网站优化-页面静态化 1)概念 提前将页面所用到的数据从数据库查询出来,然后生成一个静态页面,之后用户来访问的时候,直接返回静态页面. 举例:首页静态化:获取首页用到的数据表中的数据,生成静态首页in ...
- 大型网站提速关键技术(页面静态化,memcached,MySql优化)(三)
页面静态化的技术实现有两种方式 使用PHP自己的缓存机制 先说明一下OB缓存的机制. ob1.php 代码:说明的ob的各个用法->项目中 ☞ 如何打开ob缓存 ① 配置php.ini ...
随机推荐
- 【转】iOS使用NSMutableAttributedString实现富文本
iOS使用NSMutableAttributedString实现富文本 在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘 ...
- kvc简单实现
除了一般的赋值和取值的方法,我们还可以用Key-Value-Coding(KVC)键值编码来访问你要存取的类的属性 kvc: kvc key value coding 键值对编码 可以通过 ...
- UITextView/UITextField检测并过滤Emoji表情符号
UITextView/UITextField检测并过滤Emoji表情符号 本人在开发过程中遇到过这种情况,服务器端不支持Emoji表情,因此要求客户端在上传用户输入时,不能包含Emoji表情.在客户端 ...
- 基于CDH5.x 下面使用eclipse 操作hive 。使用java通过jdbc连接HIVESERVICE 创建表
基于CDH5.x 下面使用eclipse 操作hive .使用java通过jdbc连接HIVESERVICE 创建表 import java.sql.Connection; import java.s ...
- 对数据预处理的一点理解[ZZ]
数据预处理没有统一的标准,只能说是根据不同类型的分析数据和业务需求,在对数据特性做了充分的理解之后,再选择相关的数据预处理技术,一般会用到多种预处理技术,而且对每种处理之后的效果做些分析对比,这里面经 ...
- T-SQL语言基础
1.T-SQL语言 CREATE:创建新对象,包括数据库.表.视图.过程.触发器和函数等常见数据库对象. ALTER:修改已有对象的结构. DROP:用来删除已有的对象.有些对象是无法删除的,因为它们 ...
- centos7 开机启动某些程序的方法
针对svn,nginx每次重启后均要手工启动,好麻烦,所以考虑将其做成开机启动,做成服务好麻烦,考虑像windows 一样,放在某个启动项中完成. 打开启动文件后,发现里面文件内容如下: #!/bin ...
- 极简主义,对逻辑操作符||和&&深度运用的理解
丧心病狂的代码压缩好像违背了愉快阅读的本真,所以刨根问底想要了解个究竟,最后发现这不只是前端大牛装逼卖萌的绝技,也是代码洁癖爱好者的利器,毕竟这样看上去确实蛮优雅的; 一开始,我们接触到的代码是这样的 ...
- coreseek(sphinx)错误:WARNING: attribute 'id' not found - IGNORING
coreseek(sphinx)错误:WARNING: attribute 'id' not found - IGNORING原因及解决方法 coreseek(sphinx)建立索引时提示错误: WA ...
- C缩写
STL:Standard Template Library,标准模板库