一種Web應(yīng)用程序中的腳本插入方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,具體涉及一種Web應(yīng)用程序中的腳本插入方法及
目.ο
【背景技術(shù)】
[0002]Web應(yīng)用程序是一種可以通過Web訪問的應(yīng)用程序。Web應(yīng)用程序的一個(gè)最大好處是用戶很容易訪問的應(yīng)用程序。用戶只需要安裝瀏覽器即可,不需要再安裝其他軟件。腳本,是使用一種特定的描述性語言,依據(jù)一定的格式編寫的可執(zhí)行文件。腳本通??梢杂蒞eb應(yīng)用程序調(diào)用并執(zhí)行,各類腳本能夠在被調(diào)用時(shí)分別實(shí)現(xiàn)各種功能。在實(shí)現(xiàn)Web應(yīng)用程序?qū)δ_本的調(diào)用之前,首先完成Web應(yīng)用程序中的腳本插入。
[0003]目前,Web應(yīng)用程序中的腳本插入需要在Web應(yīng)用程序被部署之前,預(yù)先將腳本直接寫入Web應(yīng)用程序中。也就是說,現(xiàn)有的腳本插入方式不能實(shí)現(xiàn)將腳本直接插入到已經(jīng)完成部署的Web應(yīng)用程序中。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了一種Web應(yīng)用程序中的腳本插入方法及裝置,能夠?qū)⒛_本插入到已經(jīng)完成部署的Web應(yīng)用程序中。
[0005]本發(fā)明提供了一種Web應(yīng)用程序中的腳本插入方法,所述方法包括:
[0006]在接收到客戶端發(fā)送的web請求后,判斷所述web請求中是否攜帶靜態(tài)文件標(biāo)識;
[0007]如果所述web請求中未攜帶靜態(tài)文件標(biāo)識,則確定針對所述web請求返回的流數(shù)據(jù);
[0008]在所述流數(shù)據(jù)中,搜索預(yù)設(shè)的關(guān)鍵字;
[0009]通過所述關(guān)鍵字,在所述流數(shù)據(jù)中定位腳本插入位置;
[0010]將腳本插入到所述流數(shù)據(jù)中的所述腳本插入位置,并將插入所述腳本的流數(shù)據(jù)返回至所述客戶端。
[0011]優(yōu)選地,所述在所述流數(shù)據(jù)中,搜索預(yù)設(shè)的關(guān)鍵字,包括:
[0012]判斷所述流數(shù)據(jù)的流類型;
[0013]當(dāng)所述流數(shù)據(jù)為字符流時(shí),在所述流數(shù)據(jù)中,按字符搜索預(yù)設(shè)的關(guān)鍵字;
[0014]當(dāng)所述流數(shù)據(jù)為字節(jié)流時(shí),在所述流數(shù)據(jù)中,按字節(jié)搜索預(yù)設(shè)的關(guān)鍵字。
[0015]優(yōu)選地,所述通過所述關(guān)鍵字,在所述流數(shù)據(jù)中定位腳本插入位置,包括:
[0016]在所述流數(shù)據(jù)中,確定所述關(guān)鍵字所在的位置;
[0017]將與所述關(guān)鍵字所在的位置相鄰的前一個(gè)位置確定為腳本插入位置。
[0018]優(yōu)選地,所述方法還包括:
[0019]根據(jù)所述插入腳本的流數(shù)據(jù)的長度,調(diào)整所述流數(shù)據(jù)中的長度參數(shù)。
[0020]優(yōu)選地,所述腳本為javaScript腳本。
[0021]本發(fā)明還提供了一種Web應(yīng)用程序中的腳本插入裝置,所述裝置包括:
[0022]接收模塊,用于接收到客戶端發(fā)送的web請求;
[0023]判斷模塊,用于判斷所述web請求中是否攜帶靜態(tài)文件標(biāo)識;
[0024]確定模塊,用于在所述判斷模塊的結(jié)果為否時(shí),確定針對所述web請求返回的流數(shù)據(jù);
[0025]搜索模塊,用于在所述流數(shù)據(jù)中,搜索預(yù)設(shè)的關(guān)鍵字;
[0026]定位模塊,用于通過所述關(guān)鍵字,在所述流數(shù)據(jù)中定位腳本插入位置;
[0027]插入模塊,用于將所述腳本插入到所述流數(shù)據(jù)中的所述腳本插入位置;
[0028]返回模塊,用于將插入腳本的流數(shù)據(jù)返回至所述客戶端。
[0029]優(yōu)選地,所述搜索模塊包括:
[0030]判斷子模塊,用于判斷所述流數(shù)據(jù)的流類型;
[0031]第一搜索子模塊,用于當(dāng)所述流數(shù)據(jù)為字符流時(shí),在所述流數(shù)據(jù)中,按字符搜索預(yù)設(shè)的關(guān)鍵字;
[0032]第二搜索子模塊,用于當(dāng)所述流數(shù)據(jù)為字節(jié)流時(shí),在所述流數(shù)據(jù)中,按字節(jié)搜索預(yù)設(shè)的關(guān)鍵字。
[0033]優(yōu)選地,所述定位模塊包括:
[0034]第一確定子模塊,用于在所述流數(shù)據(jù)中,確定所述關(guān)鍵字所在的位置;
[0035]第二確定子模塊,用于將與所述關(guān)鍵字所在的位置相鄰的前一個(gè)位置確定為腳本插入位置。
[0036]優(yōu)選地,所述裝置還包括:
[0037]調(diào)整模塊,用于根據(jù)所述插入腳本的流數(shù)據(jù)的長度,調(diào)整所述流數(shù)據(jù)中的長度參數(shù)。
[0038]優(yōu)選地,所述腳本為javaScript腳本。
[0039]本發(fā)明提供的Web應(yīng)用程序中的腳本插入方法,在接收到客戶端發(fā)送的web請求后,判斷所述web請求中是否攜帶靜態(tài)文件標(biāo)識。如果所述web請求中未攜帶靜態(tài)文件標(biāo)識,則確定針對所述web請求返回的流數(shù)據(jù)。在所述流數(shù)據(jù)中,搜索預(yù)設(shè)的關(guān)鍵字,并通過所述關(guān)鍵字,在所述流數(shù)據(jù)中定位腳本插入位置。最后,將腳本插入到所述流數(shù)據(jù)中的所述腳本插入位置,并將插入所述腳本的流數(shù)據(jù)返回至所述客戶端。與現(xiàn)有技術(shù)相比,本發(fā)明基于流數(shù)據(jù)的方式實(shí)現(xiàn)將腳本插入到已經(jīng)完成部署的Web應(yīng)用程序中。
【附圖說明】
[0040]為了更清楚地說明本申請實(shí)施例中的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0041]圖1為本發(fā)明實(shí)施例提供的一種Web應(yīng)用程序中的腳本插入方法流程圖;
[0042]圖2為本發(fā)明實(shí)施例提供的一種Web應(yīng)用程序中的腳本插入裝置結(jié)構(gòu)示意圖;
[0043]圖3為本發(fā)明實(shí)施例提供的搜索模塊204結(jié)構(gòu)示意圖;
[0044]圖4為本發(fā)明實(shí)施例提供的定位模塊205的結(jié)構(gòu)示意圖;
[0045]圖5為本發(fā)明實(shí)施例提供一種web應(yīng)用服務(wù)器結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0046]下面將結(jié)合本申請實(shí)施例中的附圖,對本申請實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾堉械膶?shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請保護(hù)的范圍。
[0047]本發(fā)明實(shí)施例提供了一種Web應(yīng)用程序中的腳本插入方法,如圖1所示,圖1為本發(fā)明實(shí)施例提供的一種Web應(yīng)用程序中的腳本插入方法流程圖,所述方法包括:
[0048]SlOl:在接收到客戶端發(fā)送的web請求后,判斷所述web請求中是否攜帶靜態(tài)文件標(biāo)識O
[0049]S102:如果所述web請求中未攜帶靜態(tài)文件標(biāo)識,則確定針對所述web請求返回的流數(shù)據(jù)。
[0050]S103:在所述流數(shù)據(jù)中,搜索預(yù)設(shè)的關(guān)鍵字。
[0051]S104:通過所述關(guān)鍵字,在所述流數(shù)據(jù)中定位腳本插入位置。
[0052]S105:將所述腳本插入到所述流數(shù)據(jù)中的所述腳本插入位置,并將插入腳本的流數(shù)據(jù)返回至所述客戶端。
[0053]在SlOl中,用戶通過安裝有瀏覽器的客戶端向web應(yīng)用服務(wù)器發(fā)送web請求,其中,所述web請求中攜帶URL (Uniform Resource Locator,統(tǒng)一資源定位符)。當(dāng)所述web應(yīng)用服務(wù)器接收到所述web請求后,判斷所述web請求中是否攜帶靜態(tài)文件標(biāo)識。具體的,當(dāng)所述web請求中攜帶URL是以例如為.js,.css,.jpg,.jpeg,.gif,.png或者.bmp結(jié)尾時(shí),所述web應(yīng)用服務(wù)器確定該web請求中攜帶有靜態(tài)文件標(biāo)識。
[0054]本實(shí)施例中,針對攜帶靜態(tài)文件標(biāo)識的web請求,不執(zhí)行腳本的插入。
[0055]S102中,如果所述web應(yīng)用服務(wù)器確定所述web請求中未攜帶靜態(tài)文件標(biāo)識,則針對所述web請求,確定與其對應(yīng)的流數(shù)據(jù)。具體的,所述web應(yīng)用服務(wù)器根據(jù)所述web請求中攜帶的URL定位用戶請求的網(wǎng)頁資源,并將其以流數(shù)據(jù)的形式返回至客戶端。
[0056]S103中,當(dāng)所述web應(yīng)用服務(wù)器確定針對所述web請求返回的流數(shù)據(jù)之后,所述web應(yīng)用服務(wù)器在該流數(shù)據(jù)中搜索預(yù)設(shè)的關(guān)鍵字。例如,當(dāng)要插入的腳本為JavaScript腳本時(shí),預(yù)設(shè)的關(guān)鍵字則為〈/HEAD〉或者〈/head〉,〈/BODY〉或者〈/body〉。具體的,在確定的流數(shù)據(jù)中搜索上述確定的關(guān)鍵字即可。
[0057]另外,在實(shí)際操作中,針對不同流類型的流數(shù)據(jù)存在不同的讀取方式。所以,本實(shí)施例在對流數(shù)據(jù)進(jìn)行關(guān)鍵字的搜索之前,首先判斷所述流數(shù)據(jù)的流類型。具體的,當(dāng)所述流數(shù)據(jù)為字符流時(shí),在所述流數(shù)據(jù)中,按字符搜索預(yù)設(shè)的關(guān)鍵字。當(dāng)所述流數(shù)據(jù)為字節(jié)流時(shí),在所述流數(shù)據(jù)中,按字節(jié)搜索預(yù)設(shè)的關(guān)鍵字。
[0058]S104中,所述web應(yīng)用服務(wù)器在確定預(yù)設(shè)關(guān)鍵字在所述流數(shù)據(jù)中的位置后,根據(jù)所述關(guān)鍵字的位置,確定所述流數(shù)據(jù)中的腳本插入位置。一種實(shí)現(xiàn)方式中,如果腳本為JavaScript腳本,則所述web應(yīng)用服務(wù)器在所述流數(shù)據(jù)中,確定所述關(guān)鍵字所在的位置后,將與所述關(guān)鍵字所在的位置相鄰的前一個(gè)位置確定為腳本插入位置。也就是說,所述web應(yīng)用服務(wù)器將關(guān)鍵字之前的一個(gè)位置確定為javaScript腳本的插入位置。
[0059]S105中,當(dāng)所述web應(yīng)用服務(wù)器確定所述流數(shù)據(jù)中的腳本插入位置后,將預(yù)先編寫的能夠?qū)崿F(xiàn)特定功能的腳本插入到所述流數(shù)據(jù)中的所述腳本插入位置,并將插入所述腳本的流數(shù)據(jù)返回至所述客戶端。其中,常見的腳本編寫語言包括Scala、JavaScript,VBScript, Act1nScript, MAX Script, ASP,JSP,PHP, SQL,Perl, Shell,python, Ruby,JavaFX,Lua, AutoIt等。另外,通過編寫腳本能夠?qū)崿F(xiàn)特定的功能,如利用JavaScript編寫能夠?qū)崿F(xiàn)抓取用戶瀏覽頁面數(shù)據(jù),發(fā)現(xiàn)頁面訪問瓶頸的功能。
[0060]實(shí)際應(yīng)用中,由于插入腳本的流數(shù)據(jù)的總長度增加,所以,在將插入腳本的流數(shù)據(jù)返回至客戶端之前,調(diào)整該數(shù)據(jù)流中的長度參數(shù),以真實(shí)記錄該數(shù)據(jù)流的長度。
[0061]本發(fā)明實(shí)施例提供了一種在完成部署的Web應(yīng)用程序中進(jìn)行腳本插入的方法,該方法是基于流數(shù)據(jù)的方式進(jìn)行腳本插入的。由于web應(yīng)用服務(wù)器在加載用戶頁面資源時(shí),是采用數(shù)據(jù)流的方式與客戶端進(jìn)行數(shù)據(jù)傳輸。所以,本發(fā)明實(shí)施例對web應(yīng)用服務(wù)器向客戶端發(fā)送的流數(shù)據(jù)進(jìn)行攔截,在該流數(shù)據(jù)中插入腳本。當(dāng)客戶端接收到插入腳本的流數(shù)據(jù)后,通過web容器進(jìn)行頁面渲染,就可以將帶有插入腳本的頁面顯示出來。頁面中插入的腳本對用戶來說是不可見的,即用戶無法感覺頁面中插入了腳本,所以本發(fā)明提供的腳本插入方法對于用戶瀏覽頁面的影響很小。
[0062]本發(fā)明實(shí)施例還提供了另一種Web應(yīng)用程序中的腳本插入方法,所述方法被封裝為java探針。實(shí)際應(yīng)用中,該java探針被預(yù)先安裝于各個(gè)web應(yīng)用服務(wù)器上,并能夠根據(jù)各個(gè)web應(yīng)用服務(wù)器的型號確定具體的流數(shù)據(jù)處理方法。
[0063]實(shí)際應(yīng)用中,由于java探針中封裝有能夠?qū)崿F(xiàn)Web應(yīng)用程序中的腳本插入的方法,所以,對于想要實(shí)現(xiàn)