專利名稱:基于數據操作語言的動態網頁方法
技術領域:
本發明涉及一種基于數據操作語言的動態網頁方法,屬于動態網頁技術領域。
背景技術:
隨著Internet(國際互聯網)的日益發展壯大,網站建設中使用動態網頁技術已經成為主流。目前,最常用的動態網頁技術有ASP (Active Server Page動態服務器頁面)、 JSP (Java Server Pages 面向對象語言服務器頁面)和 PHP (Hypertext Preprocessor 超級文本預處理語言)等。ASP、JSP和PHP都提供在HTML代碼中嵌入某種程序代碼,由語言引擎解釋執行程序代碼的能力。在ASP、JSP和PHP環境下,HTML(Hypertext Markup Language 超文本置標語言)代碼主要負責描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。 普通的HTML頁面只依賴于Web (超文本連接)服務器,而ASP、JSP和PHP頁面需要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被重新嵌入到HTML代碼中,然后一起發送給客戶端瀏覽器。ASP、JSP和PHP三者都是面向Web服務器的技術,客戶端瀏覽器不需要任何附加的軟件支持。本發明在參考主流動態網頁技術實現原理的基礎上,創造了一種動態網頁技術——LSP0 LSP指的就是Lua Server Pages (數據操作語言服務器頁面),就是在HTML頁面中嵌入Lua腳本語言,用Lua語言作為數據操作的語言,模板語言為HTML,生成的目標語言為HTML。
發明內容
技術問題本發明針對動態網頁生成方式,采用可嵌入式腳本語言Lua語言作為數據操作的語言,模板語言為HTML,生成的目標語言為HTML,提出一種簡化配置工作,高效穩定的基于數據操作語言的動態網頁方法。技術方案本發明公開了一種基于數據操作語言的動態網頁方法,包括如下步驟在HTML頁面中,用數據操作語言Iua自定義數據表達式代碼標簽和函數調用邏輯控制代碼標簽,生成LSP文件;輸入LSP文件位置,執行LSP文件讀入HTML文件,將LSP文件中HTML代碼寫入輸出函數中,生成Lua代碼文件;數據和嵌入Lua代碼表達式的可執行HTML模板長字符串綁定,生成字符中間代碼文件;執行字符中間代碼文件輸出HTML目標代碼;將邏輯控制代碼嵌入HTML模板中,生成控制中間代碼文件,執行控制中間代碼文件輸出HTML目標代碼。LSP的實現原理,標簽的定義
定義標簽“〈# =…用于在HTML中嵌入一段Lua表達式,這個表達式在代碼生成的時候將會被解析成對應的值。定義標簽“〈#···#>”用于在HTML中嵌入一段Lua邏輯控制代碼,這個代碼會和其余的Lua代碼一起執行,一起控制最終的HTML代碼的生成。從LSP到HTML的解析、轉化過程數據的操作語言是lua,Iua本身有強大的語法支持,可以通過擴展獲取任意形式的數據,如數據庫和文本等。將LSP代碼生成HTML代碼實際上是等價于將LSP代碼中的所有Lua代碼替換掉,但是這個替換不是簡單的替換,是需要解析Lua代碼最終的執行值的, 所以模板的解析也就是所有代碼生成技術的核心。可以把LSP到HTML的轉換過程分成兩步LSP代碼的解析和最終HTML頁面的生成。LSP的解析階段把LSP模板轉化成可執行的純 Lua腳本。HTML頁面生成階段則把對應的可執行模板和數據綁定,生成最終的HTML頁面。 這兩個階段和JSP生成HTML頁面的兩個階段類似一、編譯JSP生成對應的Serverlet (服務器端的Java應用程序),實際上是一個可執行的class實體;二、解決用戶的頁面請求執行對應的Serverlet生成HTML頁面發送給客戶端。表達式代碼解析過程,以下面的模板為例Today is <# = expressionl = >, Wedding這個模板是一個場字符串中間嵌入了一個Lua表達式,模板和數據綁定后生成的結果應該是這個長字符串中間嵌入這個表達式的值的結果。如果expressionl最后的解析的結果是2012. I. 1,那生成的目標代碼應該是Today is :2012. I. I, Wedding
把該模板在第一步解析后生成如下的中間代碼
Tempf ile. Write ( “Today is: ”)
Tempfile. Write(expressionl)
碼。TempFile. Write ( “,Wedding”) 執行這段中間代碼就能在指定的文件一—Tempfil
邏輯控制代碼解析過程,
以下面的模板為例
<#Codel#>
May you have a wonderful new lifetogether !
<#Code2#>
具體可以是這樣
<#for value = Ito 3do#>
May you have a wonderful new lifetogether !
<#end#>
最終的目標是生成
May you have a wonderful new lifetogether !
May you have a wonderful new lifetogether !
May you have a wonderful new life together !這個模板在第一步解析后生成如下的中間代碼for value = Ito 3doTempfile. Write (" May you have a wonderful new life together !")end執行這段中間代碼就能在指定的文件一Tempfile里面輸出最終的目標HTML代碼。以上的方案就是整個LSP的解析和最終HTML頁面的生成生成流程,實際上這個中間結果非常重要,如果直接生成最終的目標非常困難,但是如果是要生成這個中間的代碼過程非常簡單,就是一些字符串的模式匹配。綜上所述,本發明創造是在網頁HTML中嵌入Lua代碼;網頁中嵌入Lua代碼的標簽是自定義的;服務器端的解析過程,該過程如下將嵌入了 Lua代碼的HTML頁面首先通過自己寫的函數全部轉換為Lua代碼,接著將轉換得到的純Lua代碼文件通過Lua解析器運行,生成最終提供給用戶客戶端的純HTML代碼。解析函數過程如下這個函數的輸入是一個模板文件地址,函數內部首先打開文件讀出模板,然后將整個模板字符串編譯成一個可執行的函數對象,并返回這個對象。最終HTML頁面生成函數通過輸入一個模板和一個數據,將他們綁定成對應的代碼并輸出到指定的HTML文件里面。有益效果本發明公開了基于數據操作語言的動態網頁方法,通過采用可嵌入式腳本語言Lua語言作為數據操作的語言,模板語言為HTML,生成的目標語言為HTML,在不增加系統資源消耗的基礎上,實現可簡化配置工作,高效穩定,通用易讀的動態網頁。
圖I是本發明的編程技術流程示意框圖。
具體實施例方式下面是本發明的具體實施例來進一步描述通過圖I所示,本發明的基于數據操作語言的動態網頁方法,包括如下步驟在HTML頁面中,用數據操作語言Iua自定義數據表達式代碼標簽和函數調用邏輯控制代碼標簽,生成LSP文件;輸入LSP文件位置,執行LSP文件讀入HTML文件,將LSP文件中HTML代碼寫入輸出函數中,生成Lua代碼文件;數據和嵌入Lua代碼表達式的可執行HTML模板長字符串綁定,生成字符中間代碼文件;執行字符中間代碼文件輸出HTML目標代碼;將邏輯控制代碼嵌入HTML模板中,生成控制中間代碼文件,執行控制中間代碼文件輸出HTML目標代碼。LSP服務器端的實現,LSP解析函數
根據上述的分析,首先定義一個解析模板的函數,這個函數的輸入是一個模板文件地址,函數內部首先打開文件讀出模板,然后在整個模板字符串編譯成一個可執行的函數對象,并返回這個對象。具體代碼如下
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頁面生成函數通過輸入一個模板和一個數據,將他們綁定成對應的代碼并輸出到指定的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
權利要求
1. 一種基于數據操作語言的動態網頁方法,其特征在于包括如下步驟,在HTML頁面中,用數據操作語言Iua自定義數據表達式代碼標簽和函數調用邏輯控制代碼標簽,生成LSP文件;輸入LSP文件位置,執行LSP文件讀入HTML文件,將LSP文件中HTML代碼寫入輸出函數中,生成Lua代碼文件;數據和嵌入Lua代碼表達式的可執行HTML模板長字符串綁定,生成字符中間代碼文件;執行字符中間代碼文件輸出HTML目標代碼;將邏輯控制代碼嵌入HTML模板中,生成控制中間代碼文件,執行控制中間代碼文件輸出HTML目標代碼。
全文摘要
本發明公開了一種基于數據操作語言的動態網頁方法,屬于動態網頁技術領域。本發明創造是在網頁HTML中嵌入Lua代碼;網頁中嵌入Lua代碼的標簽是自定義的;服務器端的解析過程是將嵌入了Lua代碼的HTML頁面,首先通過自己寫的函數全部轉換為Lua代碼,接著將轉換得到的純Lua代碼文件通過Lua解析器運行,生成最終提供給用戶客戶端的純HTML代碼。本發明在主流動態網頁技術的基礎上,實現了一種在HTML中嵌入Lua語言的動態網頁技術——LSP。
文檔編號G06F17/30GK102609505SQ20121002375
公開日2012年7月25日 申請日期2012年2月3日 優先權日2012年2月3日
發明者姚振剛 申請人:姚振剛