程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 全自動靜態網頁生成器之緣起及html文件解析

全自動靜態網頁生成器之緣起及html文件解析

編輯:關於ASP.NET

見過太多的大網站都已使用了靜態網頁。從性能上考慮,這當然是這類網站不二選擇。雖然一直以來都很希望能夠實現這個功能,但是畢竟沒有很急切的需求,所以一直擱置下來。終於,現在的一個項目決定使用靜態網頁生成技術,我也狠下心來解決這個問題。

曾經思考過很多種方案,但是一一否決了。一種方案是使用XML方案,從CSDN剽竊過來的思路,用XML文件保存數據,然後定義一個XSL,在客戶端解析。這種方案最大的缺點是無法處理復雜的頁面布局。設想一個很復雜的頁面,你很難定義出合適的XSL,而且在客戶端的開銷也可能不被接受。另一種是使用JavaScript,將數據作為JS文件存儲,但是並不是所有的客戶端都支持JavaScript,而且我認為這種結構不好,也不容易管理。最後一種方式是使用模板。很多人在模板中定義特殊的字符串,然後一點點的進行替換,效率低,容易錯,很難支持頁面版面和內容的變更。

綜合思考了這些問題,我還是使用了定義模板的方式,但是和前面所說的模板方式不同。我期望能實現一些自定義的數據控件,使用在模板中。在生成靜態頁面的過程中,首先解析原始的模板文件,自動將控件識別出來,然後使用自定義的數據結構對這些數據控件進行自動綁定。很多高手一看就明白,這種方式和Asp.Net的方式有幾分相似。其實我的靈感就來自它,當然以我的水平,達不到它的境界。采用這種方式,你可以在一定范圍內自由改變設計而不需改變程序。即使對版式的改變很大,如果數據沒有變動或變動很小,程序則不需變化或只需很小的變化。

畢竟我經驗尚淺,必有很多不合適的地方,希望大家能提出靜態網頁生成的更好思路,也歡迎大家批評指正。

說了半天廢話,現在言歸正傳,我們來考慮怎麼實現這個想法。如上所述,我把整個過程分為兩個步驟:先解析模板,然後數據綁定。現階段,我只實現了模板解析。在這裡先提出自定義數據控件的設計,我使用了html的格式:<flag name=value>body</flag>。 這樣,我就可以使用和解析html語言一致的方式解析自定義控件了。

在實際實現之前,我翻看了編譯原理方面的書籍,大略看了一下其中的詞法分析。這玩意真的挺復雜,沒看懂。不過不管怎麼樣,還是有收獲的,特別是那個有限自動機所謂的狀態轉換啟發了我。先不考慮特殊的html語法,一般的html標簽都是形如<flag name=value>body</flag>的格式。我定義了字符掃描的五種狀態:空狀態,正在查找控件,正在查找控件頭部,正在查找控件內容,正在查找控件結尾。(注:在寫這篇文章的時候,我覺得“正在查找控件”是多余的,但是暫且這樣吧)這樣幾種狀態的轉換依賴我定義的五種邊界字符:非邊界字符,開始邊界字符,結束邊界字符,封閉邊界字符,簡短形式的結束邊界字符。所有的這些都以枚舉的形式定義在源碼中。

時間不早了,我要回家了,今天先寫到這裡。源碼結構我覺得還是比較清晰的,注釋也比較多,如果有人有興趣詳細研究它的實現方式的話,直接看源代碼應該就可以了。如果還是不太明白或者我有時間的話,會接下去把思路完整的寫下來。

BTW:現在基本完成了解析部分。結構已經完成了,但是很有很多Bug,調試很麻煩,希望有心人能夠多多反饋。

博客:http://homer.cnblogs.com/

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved