推薦:關於Asp代碼與頁面的分離為了避免ASP程TML代碼混寫造成維護困難的情況,本文介紹了一種方法,利用模板來分離程序和頁面,使程序設計更加輕鬆。在使用ASP製作一個站點的時候,常常會出現一個ASP文件中,程序代碼和HTM
將動態頁面轉換生成靜態Html文件有許多好處,比如生成html網頁有利於被搜索引擎收錄(特別是對接受動態參數的頁面)。前台訪問時,脫離了數據訪問,減輕對數據庫訪問的壓力,加快網頁打開速度。
當然,凡事有利必有弊,生成HTML頁面無形中也耗費大量的磁盤空間以存放這些靜態文件,在編輯頁面過程中除讀寫數據庫外,也要讀寫服務器磁盤,頁面樣式的改動必須重新生成全部HTML文件,等等。
像很多搜索引擎,都可以提交網站的頁面地址列表,動態文件的收錄問題已經不算是個問題了(如google sitemap)。得失就要自己衡量把握了,但無論如何,我們還是要懂得如何操作的。這裡就引用一下別人的文章說明幾種常見的生成思路,供大家參考參考。
1、下面這個例子直接利用FSO把html代碼寫入到文件中然後生成.html格式的文件。這是最原始的,優點是簡單,缺點是頁面的修改不方便,我一般用到的地方是利用它生成整站參數文件。 (通常網站如標題,名稱等配置保存在數據庫,我將它生成config.asp保存這些變量調用,避免頻繁訪問數據庫)
| 以下為引用的內容: <% filename=test.htm if request(body)<> then set fso = Server.CreateObject(Scripting.FileSystemObject) set htmlwrite = fso.CreateTextFile(server.mappath(&filename&)) htmlwrite.write <html><head><title> & request.form(title) & </title></head> htmlwrite.write <body>輸出Title內容: & request.form(title) & <br /> 輸出Body內容: & request.form(body)& </body></html> htmlwrite.close set fout=nothing set fso=nothing end if %> <form name=form method=post action=> <input name=title value=Title size=26> <br> <textarea name=body>Body</textarea> <br> <br> <input type=submit name=Submit value=生成html> </form> |
2、但是按照上面的方法生成html文件非常不方便,第二種方法就是利用模板技術,將模板中特殊代碼的值替換為從表單或是數據庫字段中接受過來的值,完成模板功能,將最終替換過的所有模板代碼生成HTML文件。這種技術採用得比較多,大部分的CMS都是使用這類方法。
| 以下為引用的內容: template.htm ' //模板文件 <html> <head> <title>$title$ by CuoXIn.com</title> </head> <body> $body$ </body> </html> TestTemplate.asp '// 生成Html <% Dim fso,htmlwrite Dim strTitle,strContent,strOut '// 創建文件系統對象 Set fso=Server.CreateObject(Scripting.FileSystemObject) '// 打開網頁模板文件,讀取模板內容 Set htmlwrite=fso.OpenTextFile(Server.MapPath(Template.htm)) strOut=f.ReadAll htmlwrite.close strTitle=生成的網頁標題 strContent=生成的網頁內容 '// 用真實內容替換模板中的標記 strOut=Replace(strOut,$title$,strTitle) strOut=Replace(strOut,$body$,strContent) '// 創建要生成的靜態頁 Set htmlwrite=fso.CreateTextFile(Server.MapPath(test.htm),true) '// 寫入網頁內容 htmlwrite.WriteLine strOut htmlwrite.close Response.Write 生成靜態頁成功! '// 釋放文件系統對象 set htmlwrite=Nothing set fso=Nothing %> |
3、第三種方法就是用XMLHTTP獲取動態頁生成的HTML內容,再用ADODB.Stream或者Scripting.FileSystemObject保存成html文件。找到一段XMLHTTP生成Html的代碼參考一下。
| 以下為引用的內容: <% '常用函數 '1、輸入url目標網頁地址,返回值getHTTPPage是目標網頁的html代碼 function getHTTPPage(url) dim Http set Http=server.createobject(MSXML2.XMLHTTP) Http.open GET,url,false Http.send() if Http.readystate<>4 then exit function end if getHTTPPage=bytesToBSTR(Http.responseBody,GB2312) set http=nothing if err.number<>0 then err.Clear end function '2、轉換亂瑪,直接用xmlhttp調用有中文字符的網頁得到的將是亂瑪,可以通過adodb.stream組件進行轉換 Function BytesToBstr(body,Cset) dim objstream set objstream = Server.CreateObject(adodb.stream) objstream.Type = 1 objstream.Mode =3 objstream.Open objstream.Write body objstream.Position = 0 objstream.Type = 2 objstream.Charset = Cset BytesToBstr = objstream.ReadText objstream.Close set objstream = nothing End Function txtURL=server.MapPath(../index.asp) sText = getHTTPPage(txtURL) Set FileObject=Server.CreateObject(Scripting.FileSystemObject) filename=../index.htm Set openFile=FileObject.OpenTextfile(server.mapPath(filename),2,true) 'true為不存在自行建立 openFile.writeline(sText) Set OpenFile=nothing %> <script> alert(靜態網頁生成完畢); history.back(); </script> |
小結,這三種方式是比較常用的生成HTML文件方法,我個比較喜歡使用第三種方式,因為頁面改動時非常方便,就算動態頁改動多大都好,只要重新用XMLHTTP讀取生成一次即可。
分享:WEB應用的緩存兼容性設計經過代理以後,由於在客戶端和服務之間增加了中間層,因此服務器無法直接拿到客戶端的IP,服務器端應用也無法直接通過轉發請求的地址返回給客戶端。但是在轉發請求的HTTD頭信息中,增加了HTTP_X