專利名稱:基于數(shù)據(jù)操作語言的動(dòng)態(tài)網(wǎng)頁方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于數(shù)據(jù)操作語言的動(dòng)態(tài)網(wǎng)頁方法,屬于動(dòng)態(tài)網(wǎng)頁技術(shù)領(lǐng)域。
背景技術(shù):
隨著Internet(國際互聯(lián)網(wǎng))的日益發(fā)展壯大,網(wǎng)站建設(shè)中使用動(dòng)態(tài)網(wǎng)頁技術(shù)已經(jīng)成為主流。目前,最常用的動(dòng)態(tài)網(wǎng)頁技術(shù)有ASP (Active Server Page動(dòng)態(tài)服務(wù)器頁面)、 JSP (Java Server Pages 面向?qū)ο笳Z言服務(wù)器頁面)和 PHP (Hypertext Preprocessor 超級(jí)文本預(yù)處理語言)等。ASP、JSP和PHP都提供在HTML代碼中嵌入某種程序代碼,由語言引擎解釋執(zhí)行程序代碼的能力。在ASP、JSP和PHP環(huán)境下,HTML(Hypertext Markup Language 超文本置標(biāo)語言)代碼主要負(fù)責(zé)描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。 普通的HTML頁面只依賴于Web (超文本連接)服務(wù)器,而ASP、JSP和PHP頁面需要附加的語言引擎分析和執(zhí)行程序代碼。程序代碼的執(zhí)行結(jié)果被重新嵌入到HTML代碼中,然后一起發(fā)送給客戶端瀏覽器。ASP、JSP和PHP三者都是面向Web服務(wù)器的技術(shù),客戶端瀏覽器不需要任何附加的軟件支持。本發(fā)明在參考主流動(dòng)態(tài)網(wǎng)頁技術(shù)實(shí)現(xiàn)原理的基礎(chǔ)上,創(chuàng)造了一種動(dòng)態(tài)網(wǎng)頁技術(shù)——LSP0 LSP指的就是Lua Server Pages (數(shù)據(jù)操作語言服務(wù)器頁面),就是在HTML頁面中嵌入Lua腳本語言,用Lua語言作為數(shù)據(jù)操作的語言,模板語言為HTML,生成的目標(biāo)語言為HTML。
發(fā)明內(nèi)容
技術(shù)問題本發(fā)明針對動(dòng)態(tài)網(wǎng)頁生成方式,采用可嵌入式腳本語言Lua語言作為數(shù)據(jù)操作的語言,模板語言為HTML,生成的目標(biāo)語言為HTML,提出一種簡化配置工作,高效穩(wěn)定的基于數(shù)據(jù)操作語言的動(dòng)態(tài)網(wǎng)頁方法。技術(shù)方案本發(fā)明公開了一種基于數(shù)據(jù)操作語言的動(dòng)態(tài)網(wǎng)頁方法,包括如下步驟在HTML頁面中,用數(shù)據(jù)操作語言Iua自定義數(shù)據(jù)表達(dá)式代碼標(biāo)簽和函數(shù)調(diào)用邏輯控制代碼標(biāo)簽,生成LSP文件;輸入LSP文件位置,執(zhí)行LSP文件讀入HTML文件,將LSP文件中HTML代碼寫入輸出函數(shù)中,生成Lua代碼文件;數(shù)據(jù)和嵌入Lua代碼表達(dá)式的可執(zhí)行HTML模板長字符串綁定,生成字符中間代碼文件;執(zhí)行字符中間代碼文件輸出HTML目標(biāo)代碼;將邏輯控制代碼嵌入HTML模板中,生成控制中間代碼文件,執(zhí)行控制中間代碼文件輸出HTML目標(biāo)代碼。LSP的實(shí)現(xiàn)原理,標(biāo)簽的定義
定義標(biāo)簽“〈# =…用于在HTML中嵌入一段Lua表達(dá)式,這個(gè)表達(dá)式在代碼生成的時(shí)候?qū)?huì)被解析成對應(yīng)的值。定義標(biāo)簽“〈#···#>”用于在HTML中嵌入一段Lua邏輯控制代碼,這個(gè)代碼會(huì)和其余的Lua代碼一起執(zhí)行,一起控制最終的HTML代碼的生成。從LSP到HTML的解析、轉(zhuǎn)化過程數(shù)據(jù)的操作語言是lua,Iua本身有強(qiáng)大的語法支持,可以通過擴(kuò)展獲取任意形式的數(shù)據(jù),如數(shù)據(jù)庫和文本等。將LSP代碼生成HTML代碼實(shí)際上是等價(jià)于將LSP代碼中的所有Lua代碼替換掉,但是這個(gè)替換不是簡單的替換,是需要解析Lua代碼最終的執(zhí)行值的, 所以模板的解析也就是所有代碼生成技術(shù)的核心。可以把LSP到HTML的轉(zhuǎn)換過程分成兩步LSP代碼的解析和最終HTML頁面的生成。LSP的解析階段把LSP模板轉(zhuǎn)化成可執(zhí)行的純 Lua腳本。HTML頁面生成階段則把對應(yīng)的可執(zhí)行模板和數(shù)據(jù)綁定,生成最終的HTML頁面。 這兩個(gè)階段和JSP生成HTML頁面的兩個(gè)階段類似一、編譯JSP生成對應(yīng)的Serverlet (服務(wù)器端的Java應(yīng)用程序),實(shí)際上是一個(gè)可執(zhí)行的class實(shí)體;二、解決用戶的頁面請求執(zhí)行對應(yīng)的Serverlet生成HTML頁面發(fā)送給客戶端。表達(dá)式代碼解析過程,以下面的模板為例Today is <# = expressionl = >, Wedding這個(gè)模板是一個(gè)場字符串中間嵌入了一個(gè)Lua表達(dá)式,模板和數(shù)據(jù)綁定后生成的結(jié)果應(yīng)該是這個(gè)長字符串中間嵌入這個(gè)表達(dá)式的值的結(jié)果。如果expressionl最后的解析的結(jié)果是2012. I. 1,那生成的目標(biāo)代碼應(yīng)該是Today is :2012. I. I, Wedding
把該模板在第一步解析后生成如下的中間代碼
Tempf ile. Write ( “Today is: ”)
Tempfile. Write(expressionl)
碼。TempFile. Write ( “,Wedding”) 執(zhí)行這段中間代碼就能在指定的文件一—Tempfil
邏輯控制代碼解析過程,
以下面的模板為例
<#Codel#>
May you have a wonderful new lifetogether !
<#Code2#>
具體可以是這樣
<#for value = Ito 3do#>
May you have a wonderful new lifetogether !
<#end#>
最終的目標(biāo)是生成
May you have a wonderful new lifetogether !
May you have a wonderful new lifetogether !
May you have a wonderful new life together !這個(gè)模板在第一步解析后生成如下的中間代碼for value = Ito 3doTempfile. Write (" May you have a wonderful new life together !")end執(zhí)行這段中間代碼就能在指定的文件一Tempfile里面輸出最終的目標(biāo)HTML代碼。以上的方案就是整個(gè)LSP的解析和最終HTML頁面的生成生成流程,實(shí)際上這個(gè)中間結(jié)果非常重要,如果直接生成最終的目標(biāo)非常困難,但是如果是要生成這個(gè)中間的代碼過程非常簡單,就是一些字符串的模式匹配。綜上所述,本發(fā)明創(chuàng)造是在網(wǎng)頁HTML中嵌入Lua代碼;網(wǎng)頁中嵌入Lua代碼的標(biāo)簽是自定義的;服務(wù)器端的解析過程,該過程如下將嵌入了 Lua代碼的HTML頁面首先通過自己寫的函數(shù)全部轉(zhuǎn)換為Lua代碼,接著將轉(zhuǎn)換得到的純Lua代碼文件通過Lua解析器運(yùn)行,生成最終提供給用戶客戶端的純HTML代碼。解析函數(shù)過程如下這個(gè)函數(shù)的輸入是一個(gè)模板文件地址,函數(shù)內(nèi)部首先打開文件讀出模板,然后將整個(gè)模板字符串編譯成一個(gè)可執(zhí)行的函數(shù)對象,并返回這個(gè)對象。最終HTML頁面生成函數(shù)通過輸入一個(gè)模板和一個(gè)數(shù)據(jù),將他們綁定成對應(yīng)的代碼并輸出到指定的HTML文件里面。有益效果本發(fā)明公開了基于數(shù)據(jù)操作語言的動(dòng)態(tài)網(wǎng)頁方法,通過采用可嵌入式腳本語言Lua語言作為數(shù)據(jù)操作的語言,模板語言為HTML,生成的目標(biāo)語言為HTML,在不增加系統(tǒng)資源消耗的基礎(chǔ)上,實(shí)現(xiàn)可簡化配置工作,高效穩(wěn)定,通用易讀的動(dòng)態(tài)網(wǎng)頁。
圖I是本發(fā)明的編程技術(shù)流程示意框圖。
具體實(shí)施例方式下面是本發(fā)明的具體實(shí)施例來進(jìn)一步描述通過圖I所示,本發(fā)明的基于數(shù)據(jù)操作語言的動(dòng)態(tài)網(wǎng)頁方法,包括如下步驟在HTML頁面中,用數(shù)據(jù)操作語言Iua自定義數(shù)據(jù)表達(dá)式代碼標(biāo)簽和函數(shù)調(diào)用邏輯控制代碼標(biāo)簽,生成LSP文件;輸入LSP文件位置,執(zhí)行LSP文件讀入HTML文件,將LSP文件中HTML代碼寫入輸出函數(shù)中,生成Lua代碼文件;數(shù)據(jù)和嵌入Lua代碼表達(dá)式的可執(zhí)行HTML模板長字符串綁定,生成字符中間代碼文件;執(zhí)行字符中間代碼文件輸出HTML目標(biāo)代碼;將邏輯控制代碼嵌入HTML模板中,生成控制中間代碼文件,執(zhí)行控制中間代碼文件輸出HTML目標(biāo)代碼。LSP服務(wù)器端的實(shí)現(xiàn),LSP解析函數(shù)
根據(jù)上述的分析,首先定義一個(gè)解析模板的函數(shù),這個(gè)函數(shù)的輸入是一個(gè)模板文件地址,函數(shù)內(nèi)部首先打開文件讀出模板,然后在整個(gè)模板字符串編譯成一個(gè)可執(zhí)行的函數(shù)對象,并返回這個(gè)對象。具體代碼如下
function IoadTemplate(filename)
local tf = assert(io.open(filename,"r")) local code = tf:read(〃氺all〃)
—print (tf)
—print (code)
print C—----code—if (code)thenlocalIastpos=IlocalPOS=Olocalsposlocaldstcode =whiletrue do
lastpos=pos+l
spos,pos,eqs,cd 二 code: find("<#(= ) (.-) #>",pos)
__print (〃------spos, pos-------〃)
—print (spos, pos)
—print C------eqs,cd-------")
—print (eqs, cd) i f not spos thendstcode二dstcode. . "theFiLe:write(\[\[〃· · code: sub (Iastpos)··"\]\])\ break
elseif ( lastpos<spos) then dstcode^dstcode. . ^theFileiwrite(\[\[/r. . code:sub(lastpos, spos-1). ·
end
if eqs=="=〃 then
dstcode=dstcode..〃theFile:write(〃. . cd. . 〃)\n〃
dstcode^dstcode..cd. · 〃\n〃
end
end
—print (〃------------------------
--print(dstcode)
—print(〃-----------------
return loadstring(dstcode)
end
end最終HTML頁面生成函數(shù)通過輸入一個(gè)模板和一個(gè)數(shù)據(jù),將他們綁定成對應(yīng)的代碼并輸出到指定的HTML文件里面。具體代碼如下
function bind(template_file, data_file, output_file) if template_file and data—file and output_file then local-tpl = IoadTemplate(tempiate_file) if tpl then
local data_f 二 loadfile(data_file) if data—f then data_f ()
elsetheFile 二 io. open (output—I'ile, 〃w〃) if theFile then
print ("binding … [",data_file,"] + [", template—file , "] = [" , output_file, "]") tpl 0 else
print ("binding failed, invlaid output file : 〃,
output_file)
end
else
print (^binding .failed, invalid data file : , data_file)"
end
else
print ("binding failed,invalid template : 〃,template—file)
end
else
print ("binding failed, missing parameter!!!")
end
權(quán)利要求
1. 一種基于數(shù)據(jù)操作語言的動(dòng)態(tài)網(wǎng)頁方法,其特征在于包括如下步驟,在HTML頁面中,用數(shù)據(jù)操作語言Iua自定義數(shù)據(jù)表達(dá)式代碼標(biāo)簽和函數(shù)調(diào)用邏輯控制代碼標(biāo)簽,生成LSP文件;輸入LSP文件位置,執(zhí)行LSP文件讀入HTML文件,將LSP文件中HTML代碼寫入輸出函數(shù)中,生成Lua代碼文件;數(shù)據(jù)和嵌入Lua代碼表達(dá)式的可執(zhí)行HTML模板長字符串綁定,生成字符中間代碼文件;執(zhí)行字符中間代碼文件輸出HTML目標(biāo)代碼;將邏輯控制代碼嵌入HTML模板中,生成控制中間代碼文件,執(zhí)行控制中間代碼文件輸出HTML目標(biāo)代碼。
全文摘要
本發(fā)明公開了一種基于數(shù)據(jù)操作語言的動(dòng)態(tài)網(wǎng)頁方法,屬于動(dòng)態(tài)網(wǎng)頁技術(shù)領(lǐng)域。本發(fā)明創(chuàng)造是在網(wǎng)頁HTML中嵌入Lua代碼;網(wǎng)頁中嵌入Lua代碼的標(biāo)簽是自定義的;服務(wù)器端的解析過程是將嵌入了Lua代碼的HTML頁面,首先通過自己寫的函數(shù)全部轉(zhuǎn)換為Lua代碼,接著將轉(zhuǎn)換得到的純Lua代碼文件通過Lua解析器運(yùn)行,生成最終提供給用戶客戶端的純HTML代碼。本發(fā)明在主流動(dòng)態(tài)網(wǎng)頁技術(shù)的基礎(chǔ)上,實(shí)現(xiàn)了一種在HTML中嵌入Lua語言的動(dòng)態(tài)網(wǎng)頁技術(shù)——LSP。
文檔編號(hào)G06F17/30GK102609505SQ20121002375
公開日2012年7月25日 申請日期2012年2月3日 優(yōu)先權(quán)日2012年2月3日
發(fā)明者姚振剛 申請人:姚振剛