动态页面静态化

1 什么是静态页面
  静态页面是网页的代码都在页面中,不需要执行 asp,php,jsp,.net 等程序生成 客户端 网页代码的网页。静态页面不能自主管理发布更新的页面 , 如果想更新网页内容 , 要通过 FTP 软件 把文件 DOWN 下来用网页制作软件修改(通过 fso 等技术例外) 常见的静态页面举例: .html 扩展名的、 .htm 扩展名的。 注意:静态页面并非网站上没有动画的就是静态页面。
  最早的时候,网站内容是通过在主机空间中放置大量的静态网页实现的。为了方便对这些分散在不同目录的静态网页的管理,(一般是通过 FTP) ,象 frontpage/dreamweaver 这样软件甚至直接提供了向主页空间以 FTP 方式直接访问文件的功能。以静态网页为主的网站最大的困难在于对网页的管理,在这种框架里,网页框架和网页中的内容混杂在一起,很大程度地加大了内容管理的难度。为了减轻这种管理的成本,发展出了一系列的技术,在笔者的理解中,甚至连 css 本身,原本也是针对这种乱七八糟的网页维护而设计的,目的就是把网页表达的框架和内容本身抽象分离出来。
2 什么是动态页面
  动态页面是通过执行 asp,php,jsp,.net 等程序生成客户端网页代码的网页。 动态页面通常可以通过 网站后台管理系统 对网站的内容进行更新管理。发布新闻,发布公司产品,交流互动,博客,网上调查等,这都是动态网站的一些功能。也是我们常见的。 动态页面常见的扩展名有: .asp .php .jsp .cgi.aspx 等。 注意:动态页面的 动态 是网站与客户端用户互动的意思,而非网页上有动画的就是动态页面。   使用动态网页的技术是从几年前兴起,目前已经进入衰老期的网站技术,也是 BS( 浏览器和服务器结构 ) 系统的核心技术。这种技术称为动态网页,就是因为一般是在共用的网页框架下面通过程序接口抽取放在数据库或其他存储媒体中的内容,从而真正实现了把网页框架和内容提取分离的目的。也就是传统中的 php,asp,jsp,servlet 等。这种技术的发展一直以逻辑反复抽象,直到把几乎所有的系统业务逻辑合并到各个组件、控件中,网页代码仅仅完成最后对象属性读取的任务。在 JSP 中,标签结合 EL 语言就是这种发展方向的极致了。这种技术实际上就是不同的(不限数量的)内容共用网页框架,从而将网页维护成本下降到接近可以忽略的程度。在这种技术面前,象 frontpage/dreamwever 这种软件,实际上已经多少显得过时了。
编辑本段 3 为什么要动态页面静态化
  但为什么现在又要把动态网页以静态网页的形式发布呢?一个很重要的原因,就是因为搜索引擎。由于搜索引擎对 aspx 页面收录和 html 页面收录率的差别以及页面资源占用问题,我们很多时候需要实现 ASPX 页面动态转静态。以目前互联网上最普通的查找资料的方式看,互联网内容到达公众面前大致只有三条路:第一条路是通过众所周知的门户网站,老读者有意识地到达这些地方搜索相应的有针对性的资料;第二条路是做广告,通过公众使用一些免费服务的机会夹带资料信息,把公众带到目标网站;第三条路是搜索引擎,通过关键字和其他因素,把相应的信息推介到公众的面前。实际上,即使是对门户网站,这也是带来新公众的最有效的途径;而对于绝大多数的站点,除了屈指可数的几个门户外,这种搜索引擎带来的读者公众,占了至少 90% 以上的比例。   如此重要的一条公众途径自然是不能忽略的,因此,尽管搜索机器人有点讨厌,各个网站不但不会再象从前一样把它封起来,反而热情无比地搞 SEO ,所谓的面向搜索引擎的优化,其中就包括访问地址的改写,令动态网页看上去是静态网页,以便更多更大量地被 搜索引擎收录 ,从而最大限度地提高自已的内容被目标接收的机会。但是,在完全以动态技术开发的网站,转眼中要求变换成静态网页提供,同时,无论如何,动态网页的内容管理功能也是必须保留的;就如同一辆飞驶的奔驰忽然要求 180 度转弯,要付出的成本代价是非常大的,是否真的值得,也确定让人怀疑。   另一个重要原因就是提高程序性能。很多大型网站,进去的时候看它很复杂的页面,但是加载也没有耗费多长时间,除了其它必要原因以外,我认为静态化也是其中必需考虑的技术之一。她先于用户获取资源或数据库数据进而通过静态化处理,生成静态页面,所有人都访问这一个静态页面,而静态化处理的页面本身的访问速度要较动态页面快很多倍,因此程序性能会有大大的提升。总之静态化在页面上的体现为:访问速度加快,用户体验性明显提升;在 后台 体现为:访问脱离数据库,减轻了数据库访问压力。   静态化虽然可以提升程序的性能,但是它并不是提升整体性能的根本原因,就像一台电脑,只有 CPU 好或显卡好,内存好,是不行的,要看整体性能。很多时候是开发者的原因,导致程序自身性能不佳,所以性能量力而行,以项目本身性能为基础,其它优化方法为辅,最终提升整个 应用程序 的性能。
4 动态页面如何静态化
方法一:使用现成的插件,比如: ISAPI_Rewrite IIS Rewrite Apache HTTP 服务器的 mod_rewrite 等,它们都是基于正则表达式解析器开发的重写引擎。它们的使用方法查看它们自带的帮助即可。   
方法二:自己写的代码实现动态网页静态化,方法也有好几种:   
1、 创建 FSO 对象,利用此对象将所需的内容动态创建到文件中生成 HTML 页面;   
2、 利用模板技术,将模板中特殊代码的值替换为从表单或是数据库字段中接受过来的值 生成 HTML文件   
3、 使用 Server.Transfer 转换技术,   
方法三:使用 HttpWebRequest 请求客户端的方式,获取返回资源,生成静态页面。一般这样只需要获取网页内容即可,其它资源可放置在服务器上,自动加载。 ( 注:此方法缺点明显,需要大量更改匹配 URL ,建议慎用 )
 
代码:
package com.baidu;
import java.io.*;
import java.net.URL;
 
/**
 * Title: 动态页面静态化
 */
public class StaticHTMLFile {
 /**
  *
  * @param page
  *            存放静态页面的本地文件路径
  * @param url_addr
  *            所要生成的静态页的URL地址
  * @return
  */
 public static boolean PrintPage(String page, String url_addr) {
  URL url;
  String rLine = null;
  PrintWriter fileOut = null;
  InputStream ins = null;
  try {
   url = new URL(url_addr);
   ins = url.openStream();
   BufferedReader bReader = new BufferedReader(new InputStreamReader(
     ins, "gb2312"));// 获取编码为gb2312的文件
   FileOutputStream out = new FileOutputStream(page);
   OutputStreamWriter writer = new OutputStreamWriter(out, "gb2312");
   fileOut = new PrintWriter(writer);
   // 循环取取数据,并写入目标文件中
   while ((rLine = bReader.readLine()) != null) {
    String tmp_rLine = rLine; 
    int str_len = tmp_rLine.length();
    if (str_len > 0) { 
     fileOut.println(tmp_rLine);
     fileOut.flush();
    }
    tmp_rLine = null;
   }
   url = null;
   return true;
  } catch (IOException e) {
   System.out.println("error: " + e.getMessage());
   e.printStackTrace();
   return false;
  } catch (Exception es) {
   System.out.println(es.getMessage());
   return false;
  } finally {// 关闭资源
   fileOut.close();
   try {
    ins.close();
   } catch (IOException ex) {
    // 关闭输入流出错
    ex.printStackTrace();
   }
  }
 
 }
 
 public static void main(String[] args) {
  PrintPage("c:/sina.html", "http://www.sina.com/");
 }
}
最通用的做法就是,按照 jsp 文件访问路径,通过 java 程序 http 请求读取并转换成输入流,然后以 html 的格式保存到另外一个地方,任何用户的访问都访问转换成 html 后的文件即可!
 
静态化的意思,让页面变成静态的页面,这样提高访问速度,不用访问数据库。

 

你可能感兴趣的:(动态)