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