動態頁面靜態化

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_RewriteIIS RewriteApache 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後的文件即可!

 

靜態化的意思,讓頁面變成靜態的頁面,這樣提高訪問速度,不用訪問數據庫。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章