靜態技術詳解
06-19
請選中您要保存的內容,粘貼到此文本框靜態技術詳解-By綠風小子 2010年4月25日說明此文檔僅供大家學習參考,未經許可,不得有任何形式的轉載,發表,文檔版權歸作者所有,違者必究目錄一.什麼是靜態化在此之前,我們好多的人不知道什麼是靜態化,說得簡單點,就是把所有不是.htm或者.html的頁面改為.htm或者.html。我們在處理方法上,有靜態化和偽靜態方法,希望大家不要把兩者混為一潭。當然更不要把他和純靜態頁面混為一潭。1、 純靜態頁面當用戶訪問是,不需要經過伺服器解析,直接就可以傳送到客戶端,此類型的頁面,由於不需要解析就能直接訪問,一般情況下,比動態頁面的執行速度快。2、 靜態化頁面靜態化就是用動靜結合的方式將動態網站生成靜態網站來保存。這是實實在在的html文件,也就是靜態頁面。3、 偽靜態方法(Url靜態化)偽靜態不是真正意義上的靜態化,它只是利用某種方法將訪問的路徑也就是url地址轉換成為.html為後綴的文件,但是實際上,文件本身還是以原來的後綴保存在伺服器上。二.為什麼要使用靜態化技術隨著web1.0向web2.0時代的跨度,web2.0不但要求網站的交互性提高,而且還對靜態化要求更高,要以靜制動,動靜結合。同時,靜態化也是提高網站訪問速度、減輕伺服器壓力常用解決方案之一。4、僅為了SEO 我們也要實現靜態化相信對於SEO(Search Engine Optimization漢譯:搜索引擎優化)這個詞大家都不陌生。很多人都想讓自己的網站在百度,谷歌的位次靠前。而又不願意花更大的價錢去做他們的競價排名。這個時候,你就可以使用到網頁靜態化這個技術,雖然和花錢的沒法比,可是我們在不花錢的情況下比較而言已經能夠滿足我們的要求了。當然,不是說實現SEO就一定要用靜態化技術,只是說這樣做相比較而言才操作性更簡單,效果更好。5、靜態化讓給我們帶來用戶我們經常會遇到這樣的情況,當我們輸入關鍵字進行搜索時,點擊鏈接進入頁面,卻發現不是我們想要的那些內容。這是因為搜索引擎裡面的數據並不是實時更新的。可是如果我們點進進去顯示的是一張404頁面,那又會怎麼樣呢?第一,我們的大部分潛在用戶被流失。第二、我們的網站還可能被搜索引擎所K掉,因為搜索引擎會認為我們有無效鏈接,而無效鏈接過多,則會導致搜索引擎搜索質量下降。從這一點考慮,相比而言,靜態頁面一般不會出現這樣的問題。潛在用戶的增加,這一點不用多說。6、靜態化讓我們有證可查通常我們如果要查找一些比較古老的歷史資料,都會發現很難查找。就算是找到了,也不一定是在來源網站找到的。如果我們要想深入追究這些資料的原始作者、發布網站、以及其他資料,我們都無從下手。但現在有相應的互聯網檔案館專門收集網站內容,只要你是HTML靜態頁,那麼你的內容是可以根據連接找到原來的內容的。可是如果你是動態網站,那麼,至多能找到標題和列表。7、讓我們伺服器資源最大化吧動態網站與資料庫交互頻繁,如果訪問量增大,那麼讀寫次數就會相應的增加。這個時候,打開的數據連接自然會隨之增加,那麼伺服器壓力增大是必然的。要是這個時候資料庫不能承受,直接死掉,想想你的系統會怎樣?可是如果我們換成靜態頁面,即使資料庫死掉,我們依然可以正常訪問。用戶體驗大大的提升,用戶的信任度也會有很大的提高。三.靜態化的劣勢8、可維護性下降採用靜態頁面生成,會對磁碟某一區域讀寫平凡,對伺服器的損耗較大,需要即時的備份。而且針對大型系統,有必要制定相應的備份規範和更新制度。同時如果後期系統需要修改,針對大量頁面文件的修改也是需要耗費人力的,維護成本增加。9、增大伺服器空間佔有率由於生成的文件數量太多,就需要考慮文件以及文件夾結構問題,甚至對於伺服器空間大小的要求也是比較高的。同時備份的實時性也要求較高,文件數量一旦增大,備份也是一個相當大的問題。10、 消耗伺服器資源剛剛才說了靜態化會讓伺服器資源最大化,怎麼又消耗伺服器資源了呢?那是因為文件在寫入硬碟時會調用IO流,這個對伺服器資源的佔用是比較高的。四.適當的選擇是有必要的手工靜態化模板靜態化url rewrite偽靜態佔用硬碟空間少多少佔用伺服器資源小小大技術難度簡單難難後期維護難中簡單需要學習的內容html模板技術在線生成文件正則表達式看了上面的對比圖,我們明顯知道靜態化有很多優勢,也有很多劣勢。通過對比,我給大家提供一些使用的建議:1、在處理上沒有生成的頁面使用動態數據代替,一定頁面生成則使用更新的頁面訪問。2、對訪問量大的網址建議使用,但是如果你的寫入比較頻繁,而且實時性要求較高的話,建議放棄。或者,你可以選擇進行周期性更新。3、對於SEO權重比較高,而且你又剛剛起步,為非搜索引擎合作網址的話,建議使用。4、對於伺服器空間較小而訪問量較大的朋友,建議你們放棄使用,要不你們就擴大你們伺服器的空間吧。5、如果你的伺服器硬碟對頻繁寫入承受能力不夠的話,建議放棄。在對這項技術有了一個較為全面的了解之後,我們接下來看看如何來實現它吧!五.靜態化實例1、 偽靜態實例顧名思義, 偽靜態是相對真實靜態來講的.通常我們為了更好的緩解伺服器壓力,和增強搜索引擎的友好面.都將文章內容生成靜態頁面.但是有的朋友為了實時的顯示一些信息.或者還想運用動態腳本解決一些問題.不能用靜態的方式來展示網站內容.但是這就損失了對搜索引擎的友好面.怎麼樣在兩者之間找個中間方法呢,這就產生了偽靜態技術.就是展示出來的是以.html一類的靜態頁面形式。相關鏈接:偽靜態百度百科說明(http://baike.baidu.com/view/1570373.htm?fr=ala0_1_1)A. ASP.NET偽靜態1st. 方法一(Global.asax幾乎不用)IIS從收到Request開始,到返回Response整個過程中的幾個主要步驟:1.IIS收到請求。2.選擇器根據URL的特點與IIS中的配置,選擇一個ISAPI用於處理該請求——現在自然會選擇ASP.NET ISAPI。3.ASP.NET執行引擎接收到請求,於是初始化數據(例如構建各種對象)。4.開始觸發各種Pipeline事件,自然先從BeginRequest開始。5.經過了多個Pipeline事件,ASP.NET根據配置為當前請求選擇一個合適的Handler或HandlerFactory進行處理(當然特殊情況例外,例如已經在之前的事件中直接輸出結果並結束請求了)。6.經過了Handler處理之後又經過幾個Pipeline事件,以EndRequest結束。7.輸出Response。一般就是在BeginRequest事件中調用HttpContext的RewritePath方法,將該請求重新「定位」至一個目 標URL。例如我們就可以在Global.asax中重寫Application_BeginRequest方法來實現這一點.public class Global : System.Web.HttpApplication{protected void Application_BeginRequest(object sender, EventArgs e){HttpContext context = HttpContext.Current;if (context.Request.Path.Equals("/Customers",StringComparison.InvariantCultureIgnoreCase)){context.RewritePath("~/CustomerList.aspx");}}}2nd. 方法二(ASP.NET級別的URL Rewrite組件)(查看)b.1_ 引用URLRewriter.dll;b.2_ 在web.xml中配置<httpModules><add name="ModuleRewriter"type="URLRewriter.ModuleRewriter, URLRewriter" /></httpModules><configSections><section name="RewriterConfig"type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /></configSections><RewriterConfig><Rules><RewriterRule><LookFor>~/test/([w]+).html/</LookFor><SendTo>~/Default.aspx?test=$1</SendTo></RewriterRule></Rules></RewriterConfig>相關鏈接:ASP.NET偽靜態實例1(http://allanpie.blog.163.com/blog/static/2132041020100892132572/)B. JAVA偽靜態實例1.需要包urlrewrite.zip;查看2. 在WEB-INF目錄下建一個urlrewrite.xml文件內容示例:<?xml version="1.0" encoding="utf-8"?><!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN""http://tuckey.org/res/dtds/urlrewrite2.6.dtd"><urlrewrite><rule><from>^/(w+)/(w+)/page_(d+).html$</from><to type="forward">/$1.htm?category=$2&page=$3</to></rule><rule><from>^/rss/yahoo.html$</from><to type="redirect">http://add.my.yahoo.com/rss? url=http://feed.feedsky.com/W3CSSiteFeed</to></rule></urlrewrite>3.修改WEB.XML<filter><filter-name>UrlRewriteFilter</filter-name><filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class></filter><filter-mapping><filter-name>UrlRewriteFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><init-param><param-name>confPath</param-name><param-value>/WEB-INF/urlrewrite.xml</param-value></init-param>原文地址:http://blog.csdn.net/snowwhite1129/archive/2010/04/12/5477079.aspx2、 生成靜態頁面實例不管怎麼說,雖然有了靜態化技術,但是網頁的內容管理功能也是必須保留的,下面我們來看下如何用代碼來實現靜態化文件的製作。A. ASP.NET靜態化當然首先,我們得有一個靜態模板頁,也就是要生成頁面的樣式我們得有。那麼我們看下目錄結構1、a.html 這個頁面就是模板頁2、a.aspx 這個頁面當然是內容編輯頁面了3、a.aspx.cs 這個不用說,就是內容編輯頁面的伺服器端代碼。好了,了解了目錄結構我們來看下代碼的實現。1、a.html 部分<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>!title!</title><link href="../css/User_Reg.css" rel="stylesheet" type="text/css" /></head><body><br/><div class="content title30">!title!</div><br/><div class="content"><div class="agreement">!content!<br/><input name="bt_1" type="button" value="關閉" onclick="<script></script>"/><br/></div><div class="copyright_line"></div><div class="copyright">Copyright ? 2008 <a href="http://www.xiexieshu.com"><strong>Xiexieshu.Com </strong></a>All rights Reserved</div></div></body></html>這裡大家注意下紅色部分,紅色部分就是你要替代的內容。比如!title!就是標題。這裡的替換字元大家可以隨意改變,因為雙感嘆號的使用在內容裡面是比較少見的,所以我用的是這種方法。大家可以把這個改為其他的不常用的特殊符號,越特殊越好,越複雜越好,不過你們可得考慮下可操作性。那麼有了模板也,我們接下來就是要從內容編輯頁面獲取字元串替換掉我們想替換的部分。然後生成頁面就可以了。我們看看編輯頁面代碼2、a.aspx 部分<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AgreeMent.aspx.cs" Inherits="AgreeMent" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"><title>無標題頁</title></head><body><form id="form1" runat="server"><div><asp:Literal ID="Literal3" runat="server" Text="頁面名稱:"></asp:Literal><br /> <asp:TextBox ID="TextBox3"runat="server"></asp:TextBox><br /><asp:Literal ID="Literal1" runat="server" Text="標題:"></asp:Literal><br /> <asp:TextBox ID="TextBox1"runat="server"></asp:TextBox><br /><br /><asp:Literal ID="Literal2" runat="server" Text="內容:"></asp:Literal><br /> <asp:TextBox ID="TextBox2" runat="server" Height="331px" TextMode="MultiLine" Width="566px"></asp:TextBox><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="生成頁面:" /></div></form></body></html>編輯頁面和普通的編輯頁面沒有什麼兩樣。重點在於後面的伺服器端頁面3、a.aspx.cs頁面using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO;//調用IO包,讀取文本文件 打開和讀取文件進行讀取訪問是輸入/輸出using System.Text; //對流進行操作時要用到的包public partial class AgreeMent : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void Button1_Click(object sender, EventArgs e){String path = HttpContext.Current.Server.MapPath("");//獲取當前文件路徑StreamReader r = new StreamReader(path + @"a.html");//通過路徑獲取模板文件內容String line = null;StringBuilder str = new StringBuilder();//大量字元串拼接或頻繁對某一字元串進行操作時最好使用 StringBuilder//開始讀取模板文件內容while ((line = r.ReadLine()) != null){str.AppendLine(line);//這裡就是一行一行的拼接字元串}r.Close();str.Replace("!title!", TextBox1.Text);//好了,開始替換文本str.Replace("!content!", TextBox2.Text);StreamWriter w = new StreamWriter(path + @"agreement" + TextBox3.Text + ".html");//實例化,並制定文件名稱規則和生成文件路徑w.Write(str);//這裡才真正開始創建文件w.Close();//不要忘了關閉哦}}上面的代碼相信已經寫得很詳細了,如果你還看不懂,那麼我只能說是你的人品問題了,好好複習下基礎吧!B. JAVA靜態化這裡難得去寫了,好吧,我承認我不稱職。不過,我是在教大家方法,你們可以按照上面的方法依瓢畫葫蘆,掌握了思路就知道該怎麼辦了。六.更為詳細的解決方案
如圖所示:1、編輯文章,通過頁面編輯儲存到資料庫,數據操作用來增刪改數據。2、發布文章,通過頁面生成器從資料庫讀取數據和模板生成相應的靜態頁面。3、讀取整個欄目文件數量,重構索引文件和分頁文件。注意:這三個步驟看是分開的,但是在執行時是一氣呵成的。也就是說點擊一個按鈕的同時,要依次執行這三個功能。
推薦閱讀:
※Technical Writer 日常工作中好用的小工具
※拔甲術 基層實用技術版 基層醫生網
※四角防衛術:截拳道基本街戰技術
※八步十三刀動作名稱及技術圖解 轉載
※散手道紫帶技術及實戰應用
TAG:技術 |