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