一般用.net生成靜態(tài)化網(wǎng)頁方法有兩種,一般是通過瀏覽器去觸發(fā)動態(tài)的.aspx文件來達(dá)到解析網(wǎng)頁,然后再生成網(wǎng)頁,這種方法我們不用(因為這種方法需要浪費比較大的服務(wù)器性能,而且速度比較慢,一秒大概只能生成10個網(wǎng)頁左右),所以我們今天要講的是第二種方法,寫一個網(wǎng)頁模板,然后再用.net去解析標(biāo)簽,然后以完成這一個生成網(wǎng)頁靜態(tài)化功能(獨占網(wǎng)絡(luò)(http://www.ykfic.cn)-深圳網(wǎng)站建設(shè)-http://www.ykfic.cn技術(shù)人員測試過1秒可以生成100多個網(wǎng)頁,性能非常好而且穩(wěn)定,如果在開啟多線程的情況,用戶體驗效果也非常好。)
先我們生成網(wǎng)頁化網(wǎng)頁需要用到的技術(shù)就有I/O流的文件讀寫,然后我們再會用到正則表達(dá)式去解析標(biāo)簽,多我們再用多線程去保證穩(wěn)定還有速度。
先我們建立一個叫duzhan.html(主文件),還有一個top.html(頭部文件)
我們在頭部文件里面寫信息如下:
這是網(wǎng)頁的頭部文件,頭部文件來源了深圳市獨占網(wǎng)絡(luò)科技有限公司(http://www.ykfic.cn)
然后我們寫入duzhan.html(主文件)的代碼是
<!doctype html>
<html>
<head>
</head>
//這是要解析的頭文件,剛才是上面的我們寫的Top.html文件
<!--include file="Top.html" /-->
//這是一個循環(huán)的解析標(biāo)簽,我們下面會用到,我們這里先寫在這里
<!--list table="1" typeid="1" num="10" where=" 1=1 " order="sortid asc,id asc" -->
//這是一個判斷的標(biāo)簽,我們這里也是先寫在這里,下面會講到
<!--if testbase="@index@" testvalue="1" testmodel="=" -->
<li><a href="/zhishi/112109.html"><img rel="" src=""/></a></li>
<!--else-->
<li><a href="/zhishi/112109.html"><img rel="" src=""/></a></li>
<!--/if-->
<!--/list-->
</body>
</html>
現(xiàn)在我們已經(jīng)把兩個網(wǎng)頁的模板寫好了,接下面我們就是要解析好我們寫的標(biāo)簽,然后去生成它。
先我們建一個CreateFile.cs文件來放置讀寫文件的方法。
//這是一個創(chuàng)建新靜態(tài)頁面信息,newsStrWebInfo是一個傳入我們傳入的參數(shù)(用于替換原有的信息)
public static string CreateSingleFile(string strModeFilePath)
{
//創(chuàng)建一個讀文件信息的文件流
StreamReader strReader = null;
//查找出模塊文件在服務(wù)器里面的路徑,這里不用Server.MapPath,在多線程的時候會有問題
string FilePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + strModeFilePath;
//怎樣一個編號為Utf-8的信息
Encoding code = Encoding.GetEncoding("utf-8");
//創(chuàng)建一個strAllInfo字符串用于存放我們讀取的信息
string strAllInfo = string.Empty;
try
{
//得到一個讀取的文件流,文件路徑為FilePath,編碼為code
strReader = new StreamReader(FilePath, code);
//讀取文件流里面的全部信息然后存放在strAllInfo里面去
strAllInfo = strReader.ReadToEnd();
}
catch (Exception ex)
{
throw ex;
} finally
{ //關(guān)閉讀取文件流
strReader.Close();
}
return strAllInfo;
}
然后我們再寫一個入的方法。
public bool CreateWriteFile(string strNewsFilePath, string strFileinfo)
{
bool flag = false;
//創(chuàng)建一個寫文件信息的文件流
StreamWriter strWrite = null;
//怎樣一個編號為Utf-8的信息
Encoding code = Encoding.GetEncoding("utf-8");
try
{ //創(chuàng)建一個寫入文件流
strWrite = new StreamWriter(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + strNewsFilePath, false, code);
//將剛才記取到的信息寫入到文件流里面去
strWrite.Write(strFileinfo);
//創(chuàng)建成功就true
flag = true;
}catch (Exception ex)
{
throw ex;
} finally
{ strWrite.Flush();
//關(guān)閉文件流
strWrite.Close();
}
return flag;
}
上面的定義了讀取的模板還有生成模板的方法了,我們接下來就是建立一個解析標(biāo)簽的方法。
我們就建立一個 DuZhanTag.cs文件
我們建立一個生成網(wǎng)頁的方法
public void createDefault(string htmlpath, string filename)
{
//將我們剛才寫的duzhan.html文件路徑寫進(jìn)去然后讀取到信息
string html = CreateFile.CreateSingleFile(htmlpath);
//如果讀取的信息沒有讀取到信息我們就返回回去。
if (string.IsNullOrEmpty(html))
{ return; }
//解析我們的標(biāo)簽,這個方法我們在下面定義。
html=CreateIncludeHtml(strAllInfo);
//生成文件
new CreateFile().CreateWriteFile(filename, html);
}
由于網(wǎng)頁放不下,所以我們把下面的方法寫在
.net快速生成靜態(tài)網(wǎng)頁的方法二