服務器端包含技術(shù)改進的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及一種服務器端包含技術(shù)改進的方法和裝置。
【背景技術(shù)】
[0002]在tomcat中部署網(wǎng)站時有很多關(guān)于服務端網(wǎng)頁嵌入的場景,在這些場景中將內(nèi)容發(fā)送到瀏覽器之前,可以使用“服務器端包含(SSI,即Server Side Include) ”指令將文本、圖形或應用程序信息包含到網(wǎng)頁中。
[0003]在tomcat容器中,有關(guān)于SSI指令處理的相關(guān)技術(shù),主要包括兩種實現(xiàn)方式:一種是基于過濾器Filter來實現(xiàn)的請求過濾,另一種是基于servlet實現(xiàn)的請求處理。
[0004]tomcat中這兩種SSI技術(shù)的實現(xiàn)原理基本相似:對響應對象進行自定義封裝,然后添加一個獲取響應數(shù)據(jù)方法,在過濾器內(nèi)通過該方法對響應內(nèi)數(shù)據(jù)進行復制,對復制的數(shù)據(jù)進行SSI指令過濾處理。
[0005]然而,現(xiàn)有的關(guān)于SSI指令處理技術(shù)存在以下缺點:
[0006]1.使用tomcat中的SSI技術(shù)嚴重影響網(wǎng)頁的加載速度。
[0007]2.使用tomcat中的SSI技術(shù)時,由于采用了對響應內(nèi)數(shù)據(jù)復制的數(shù)據(jù)進行SSI指令處理,當有大并發(fā)訪問時會產(chǎn)生大量的復制數(shù)據(jù),占用系統(tǒng)內(nèi)存,影響系統(tǒng)并發(fā)性能。
【發(fā)明內(nèi)容】
[0008]有鑒于此,本發(fā)明提供一種服務器端包含技術(shù)改進的方法和裝置,能夠省去對響應數(shù)據(jù)的內(nèi)存復制操作,從而提高使用tomcat中的SSI技術(shù)時的網(wǎng)頁加載速度,并且在有大并發(fā)訪問時避免產(chǎn)生大量的垃圾對象影響系統(tǒng)性能。
[0009]為實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種服務器端包含技術(shù)改進的方法包括:創(chuàng)建包裝類對服務器的響應進行封裝,并在所述包裝類中自定義輸出流實現(xiàn)類;向所述輸出流實現(xiàn)類中寫入響應數(shù)據(jù);將所寫入的響應數(shù)據(jù)返回瀏覽器,其中向所述輸出流實現(xiàn)類中寫入響應數(shù)據(jù)還包括:在向所述輸出流實現(xiàn)類寫入響應數(shù)據(jù)的過程中,遍歷檢測響應數(shù)據(jù)是否包括服務器端包含指令,若包括,則對所述服務器端包含指令進行處理,并向所述輸出流實現(xiàn)類寫入處理后的響應數(shù)據(jù);若不包括,則直接向所述輸出流實現(xiàn)類寫入響應數(shù)據(jù)。
[0010]可選地,所述方法還包括:在創(chuàng)建包裝類對服務器的響應進行封裝之前,判斷對服務器的響應是否進行攔截,若攔截,則攔截并進行封裝,若不攔截,則直接向瀏覽器返回響應。
[0011]可選地,判斷對服務器的響應是否進行攔截包括:根據(jù)瀏覽器發(fā)送請求的請求路徑判斷是否攔截,按照預設規(guī)則設定攔截路徑名單,若所述請求的請求路徑與所述攔截路徑名單中的數(shù)據(jù)匹配成功,則對服務器針對所述請求做出的響應進行攔截;若所述請求的請求路徑與所述攔截路徑名單中的數(shù)據(jù)匹配不成功,則將服務器的響應直接返回瀏覽器。
[0012]可選地,對所述服務器端包含指令進行處理包括:解析檢測到的服務器端包含指令,加載對應內(nèi)容對服務器端包含指令進行替換。
[0013]根據(jù)本發(fā)明的另一方面,提供一種服務器端包含技術(shù)改進的裝置。
[0014]本發(fā)明服務端網(wǎng)頁包含技術(shù)的改進裝置包括:封裝模塊,用于創(chuàng)建包裝類對服務器的響應進行封裝,并在所述包裝類中自定義輸出流實現(xiàn)類;寫入模塊,用于向所述輸出流實現(xiàn)類中寫入響應數(shù)據(jù);返回模塊,用于將所寫入的響應數(shù)據(jù)返回瀏覽器,其中寫入模塊還用于:在向所述輸出流實現(xiàn)類寫入響應數(shù)據(jù)的過程中,遍歷檢測響應數(shù)據(jù)是否包括服務器端包含指令,若包括,則對所述服務器端包含指令進行處理,并向所述輸出流實現(xiàn)類寫入處理后的響應數(shù)據(jù);若不包括,則直接向所述輸出流實現(xiàn)類寫入響應數(shù)據(jù)。
[0015]可選地,所述封裝模塊還用于:在創(chuàng)建包裝類對服務器的響應進行封裝之前,判斷對服務器的響應是否進行攔截,若攔截,則攔截并進行封裝,若不攔截,則直接向瀏覽器返回響應。
[0016]可選地,所述封裝模塊還用于:根據(jù)瀏覽器發(fā)送請求的請求路徑判斷是否攔截,按照預設規(guī)則設定攔截路徑名單,若所述請求的請求路徑與所述攔截路徑名單中的數(shù)據(jù)匹配成功,則對服務器針對所述請求做出的響應進行攔截;若所述請求的請求路徑與所述攔截路徑名單中的數(shù)據(jù)匹配不成功,則將服務器的響應直接返回瀏覽器。
[0017]可選地,所述寫入模塊還用于:解析檢測到的服務器端包含指令,加載對應內(nèi)容對服務器端包含指令進行替換。
[0018]根據(jù)本發(fā)明的技術(shù)方案,通過在對響應攔截前的判斷,從而能避免不必要的處理工作,提高服務器端返回響應的效率;通過將服務器響應攔截,創(chuàng)建包裝類進行封裝,并通過重寫的方法,向自定義的輸出流實現(xiàn)類寫入響應數(shù)據(jù),從而能夠在向輸出流實現(xiàn)類寫入數(shù)據(jù)的過程中檢測SSI指令,并將SSI指令的對應內(nèi)容替換到響應數(shù)據(jù)中,從而能夠?qū)崿F(xiàn)無需復制響應數(shù)據(jù)就能處理SSI指令,提高使用SSI技術(shù)的網(wǎng)站的并發(fā)性能,并且當網(wǎng)站有大并發(fā)時,不會產(chǎn)生大量垃圾對象,避免內(nèi)存溢出。
【附圖說明】
[0019]附圖用于更好地理解本發(fā)明,不構(gòu)成對本發(fā)明的不當限定。其中:
[0020]圖1是根據(jù)本發(fā)明實施例的服務器端包含技術(shù)改進的方法的主要步驟示意圖;
[0021]圖2是根據(jù)本發(fā)明是實施例的服務器端包含技術(shù)改進的方法主要步驟的流程圖。
[0022]圖3是根據(jù)本發(fā)明實施例的服務器端包含技術(shù)改進的裝置的主要模塊示意圖。
【具體實施方式】
[0023]以下結(jié)合附圖對本發(fā)明的示范性實施例做出說明,其中包括本發(fā)明實施例的各種細節(jié)以助于理解,應當將它們認為僅僅是示范性的。因此,本領(lǐng)域普通技術(shù)人員應當認識至IJ,可以對這里描述的實施例做出各種改變和修改,而不會背離本發(fā)明的范圍和精神。同樣,為了清楚和簡明,以下的描述中省略了對公知功能和結(jié)構(gòu)的描述。
[0024]圖1是根據(jù)本發(fā)明實施例的服務器端包含技術(shù)改進的方法的主要步驟示意圖。
[0025]如圖1所示,本發(fā)明的服務器端包含技術(shù)改進的方法主要包括如下步驟:
[0026]步驟S11:創(chuàng)建包裝類對服務器的響應進行封裝,并在所述包裝類中自定義輸出流實現(xiàn)類。在本發(fā)明具體實施例中,主要基于J2EE過濾器實現(xiàn),過程如下:對服務器的響應進行封裝,簡化對響應數(shù)據(jù)的調(diào)用工作,并且通過重寫的方法,使得實現(xiàn)類對響應數(shù)據(jù)進行繼承。
[0027]在對響應數(shù)據(jù)進行封裝之前,需要過濾器對服務器的響應進行攔截。但并非所有的服務器針對瀏覽器的請求做出的響應都需要攔截,攔截的過程需要一個預判。
[0028]在本發(fā)明【具體實施方式】中,過濾器對服務器的響應是否攔截的判斷是根據(jù)請求路徑進行的。首先,在過濾器內(nèi)配置一個黑名單和白名單,黑名單是需要被攔截的,白名單則是不攔截的。例如,黑名單配置的攔截路徑是getList,則當瀏覽器發(fā)送的請求路徑中包含getList時該請求的響應就會被攔截。判斷黑白名單中是否包含瀏覽器發(fā)送的請求路徑,是通過模糊匹配的算法予以實現(xiàn)。只要被黑名單匹配成功,則服務器的響應結(jié)果就會被攔截,并予以封裝等處理。
[0029]對服務器的響應進行攔截后,需要創(chuàng)建包裝類對服務器的響應進行封裝,并在包裝類中自定義輸出流實現(xiàn)類。完成該步驟的封裝之后,從步驟S12開始處理。
[0030]步驟S12:向所述輸出流實現(xiàn)類中寫入響應數(shù)據(jù)。通過重寫的方法,將包裝類中的數(shù)據(jù)寫入輸出流實現(xiàn)類。
[0031]向輸出流實現(xiàn)類寫入響應數(shù)據(jù)的過程中,可以一邊寫入數(shù)據(jù)一邊進行SSI指令的檢測和處理,可以省去現(xiàn)有技術(shù)中對響應數(shù)據(jù)進行內(nèi)存復制的操作,從而可以避免產(chǎn)生大量垃圾對象,提高系統(tǒng)的并發(fā)性能。
[0032]因此,在本發(fā)明的具體實施例中,在向所述輸出流實現(xiàn)類寫入響應數(shù)據(jù)的過程中,檢測寫入數(shù)據(jù)是否包括SSI指令,如果不包括SSI指令,則直接向輸出流實現(xiàn)類寫入響應數(shù)據(jù),然后返回響應頁面給瀏覽器;如果包括SSI指令則對