本發(fā)明涉及服務(wù)器技術(shù)領(lǐng)域,尤其是涉及一種防御Spring MVC網(wǎng)站崩潰的方法及系統(tǒng)。
背景技術(shù):
Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring框架提供了構(gòu)建Web應(yīng)用程序的全功能MVC模塊。使用Spring可插入的MVC架構(gòu),從而在使用Spring進(jìn)行WEB開發(fā)時,可以選擇使用Spring的SpringMVC框架或集成其他MVC開發(fā)框架,如Struts1,Struts2等。目前使用Spring MVC開發(fā)的網(wǎng)站,有可能會由于一些程序編寫不夠嚴(yán)謹(jǐn),導(dǎo)致網(wǎng)站崩潰,并且崩潰后目前只能設(shè)置自動重啟,但是過多的崩潰就會導(dǎo)致網(wǎng)站頻繁重啟,也會使得網(wǎng)站幾乎無法使用。
中國專利申請(CN201210443887.2)公開了一種使瀏覽器崩潰的網(wǎng)址的處理方法、裝置及系統(tǒng)。但該專利適用于移動端瀏覽器領(lǐng)域,是只能防止客戶端瀏覽器崩潰,卻無法從原進(jìn)程上(即服務(wù)端)防御崩潰。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是:提供防御網(wǎng)站崩潰的方案,可從原進(jìn)程防御網(wǎng)站崩潰,防止加載崩潰進(jìn)程,從而提高穩(wěn)定性。
為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:提供一種防御網(wǎng)站崩潰的方法,包括:
對每個發(fā)送到服務(wù)端的請求通過Spring MVC的中定制攔截器生成唯一標(biāo)識;
當(dāng)請求的事件結(jié)束時,根據(jù)唯一標(biāo)志將該請求標(biāo)記為結(jié)束;
網(wǎng)站崩潰時,獲取網(wǎng)站崩潰時間點(diǎn)前最后一個未被標(biāo)記為結(jié)束的請求,并標(biāo)記為疑似崩潰請求;
網(wǎng)站再次崩潰時,獲取兩次崩潰之間的最后一個未被標(biāo)記為結(jié)束的請求,并與疑似崩潰請求進(jìn)行比對;
若比對一致,則確認(rèn)疑似崩潰請求為導(dǎo)致崩潰的請求;
若再次收到上述導(dǎo)致崩潰的請求,則不執(zhí)行該請求。
為解決上述問題,本發(fā)明還提供一種防御網(wǎng)站崩潰的系統(tǒng),包括:
發(fā)送生成模塊,用于對每個發(fā)送到服務(wù)端的請求通過Spring MVC的中定制攔截器生成唯一標(biāo)識;
結(jié)束確認(rèn)模塊,用于當(dāng)請求的事件結(jié)束時,根據(jù)唯一標(biāo)志將該請求標(biāo)記為結(jié)束;
疑似崩潰模塊,用于獲取網(wǎng)站崩潰時間點(diǎn)前最后一個未被標(biāo)記為結(jié)束的請求,并標(biāo)記為疑似崩潰請求;
第一比對模塊,用于對疑似崩潰請求進(jìn)行比對;
崩潰確認(rèn)模塊,用于若比對一致,則確認(rèn)疑似崩潰請求為導(dǎo)致崩潰的請求;
請求防御模塊,用于若再次收到上述導(dǎo)致崩潰的請求,則不執(zhí)行該請求。
本發(fā)明的有益效果在于:區(qū)別于現(xiàn)有技術(shù),本發(fā)明獲取網(wǎng)站崩潰前最后一個時點(diǎn)為結(jié)束的請求,作為疑似崩潰請求,并比對,確認(rèn)一致后,作為導(dǎo)致崩潰的請求,并作為后續(xù)的請求的參考,以進(jìn)行判斷是否執(zhí)行后續(xù)請求。通過上述方式,本發(fā)明可以提高網(wǎng)站穩(wěn)定性,減少由于程序?qū)е卤罎⒌拇a導(dǎo)致網(wǎng)站連續(xù)崩潰無法使用的情況。
附圖說明
圖1為本發(fā)明方法實(shí)施例一的流程示意圖;
圖2為本發(fā)明系統(tǒng)實(shí)施例二的結(jié)構(gòu)框圖。
具體實(shí)施方式
為詳細(xì)說明本發(fā)明的技術(shù)內(nèi)容、所實(shí)現(xiàn)目的及效果,以下結(jié)合實(shí)施方式并配合附圖予以說明。
本發(fā)明最關(guān)鍵的構(gòu)思在于:獲取網(wǎng)站崩潰前最后一個時點(diǎn)為結(jié)束的請求,作為疑似崩潰請求,并比對,確認(rèn)一致后,作為導(dǎo)致崩潰的請求,并作為后續(xù)的請求的參考,以進(jìn)行判斷是否執(zhí)行后續(xù)請求。
請參照圖1,本發(fā)明實(shí)施例一提供一種防御網(wǎng)站崩潰的方法,包括:
對每個發(fā)送到服務(wù)端的請求通過Spring MVC的中定制攔截器生成唯一標(biāo)識;
當(dāng)請求的事件結(jié)束時,根據(jù)唯一標(biāo)志將該請求標(biāo)記為結(jié)束;
網(wǎng)站崩潰時,獲取網(wǎng)站崩潰時間點(diǎn)前最后一個未被標(biāo)記為結(jié)束的請求,并標(biāo)記為疑似崩潰請求;
網(wǎng)站再次崩潰時,獲取兩次崩潰之間的最后一個未被標(biāo)記為結(jié)束的請求,并與疑似崩潰請求進(jìn)行比對;
若比對一致,則確認(rèn)疑似崩潰請求為導(dǎo)致崩潰的請求;
若再次收到上述導(dǎo)致崩潰的請求,則不執(zhí)行該請求。
區(qū)別于現(xiàn)有技術(shù),本發(fā)明在發(fā)送到服務(wù)端的每一個請求都通過Spring MVC的中定制攔截器生成唯一標(biāo)識,并獲取網(wǎng)站崩潰前最后一個時點(diǎn)為結(jié)束的請求,作為疑似崩潰請求,并比對,確認(rèn)一致后,作為導(dǎo)致崩潰的請求,并作為后續(xù)的請求的參考,以進(jìn)行判斷是否執(zhí)行后續(xù)請求。通過上述方式,本發(fā)明可以提高網(wǎng)站穩(wěn)定性,減少由于程序?qū)е卤罎⒌拇a導(dǎo)致網(wǎng)站連續(xù)崩潰無法使用的情況。
其中,本發(fā)明所述請求的事件結(jié)束包括正常結(jié)束和異常結(jié)束。應(yīng)當(dāng)說明的是,異常結(jié)束并非導(dǎo)致網(wǎng)站崩潰的請求,兩者是不同的概念,如果網(wǎng)站崩潰就不會執(zhí)行到異常結(jié)束的代碼。
具體地,發(fā)送請求到服務(wù)端時,通過Spring MVC的中定制攔截器在請求事件開始時,對請求內(nèi)容進(jìn)行記錄,并生成唯一標(biāo)識,以標(biāo)記當(dāng)前請求。
網(wǎng)站崩潰時,自動重啟網(wǎng)站,并查詢所述未被標(biāo)記為結(jié)束的請求,并標(biāo)記為疑似崩潰請求;
網(wǎng)站再次崩潰時,獲得另一個疑似崩潰請求;
比對上述兩個疑似崩潰請求,判斷是否一致;
若不一致,則記錄上述所有疑似崩潰請求,并返回步驟“網(wǎng)站再次崩潰時,獲得另一個疑似崩潰請求”。
“若再次收到上述導(dǎo)致崩潰的請求,則不執(zhí)行該請求”具體為:
將所有后續(xù)請求與所述導(dǎo)致崩潰的請求進(jìn)行比對,判斷是否一致;
若是,則不執(zhí)行該后續(xù)請求;
反之,則執(zhí)行該后續(xù)請求;
若執(zhí)行該后續(xù)請求時,網(wǎng)站崩潰,則將該后續(xù)請求作為疑似崩潰請求,并與其他疑似崩潰請求進(jìn)行比對。
對應(yīng)地,如圖2所示,本發(fā)明實(shí)施例二還提供一種防御Spring MVC網(wǎng)站崩潰的系統(tǒng)100,包括:
發(fā)送生成模塊110,用于對每個發(fā)送到服務(wù)端的請求通過Spring MVC的中定制攔截器生成唯一標(biāo)識;
結(jié)束確認(rèn)模塊120,用于當(dāng)請求的事件結(jié)束時,根據(jù)唯一標(biāo)志將該請求標(biāo)記為結(jié)束;
疑似崩潰模塊130,用于獲取網(wǎng)站崩潰時間點(diǎn)前最后一個未被標(biāo)記為結(jié)束的請求,并標(biāo)記為疑似崩潰請求;
第一比對模塊140,用于對疑似崩潰請求進(jìn)行比對;
崩潰確認(rèn)模塊150,用于若比對一致,則確認(rèn)疑似崩潰請求為導(dǎo)致崩潰的請求;
請求防御模塊160,用于若再次收到上述導(dǎo)致崩潰的請求,則不執(zhí)行該請求。
其中,所述請求的事件結(jié)束包括正常結(jié)束和異常結(jié)束。
所述發(fā)送生成模塊具體用于:發(fā)送請求到服務(wù)端時,通過Spring MVC的中定制攔截器在請求事件開始時,對請求內(nèi)容進(jìn)行記錄,并生成唯一標(biāo)識,以標(biāo)記當(dāng)前請求。
所述疑似崩潰模塊具體用于:在網(wǎng)站崩潰時,自動重啟網(wǎng)站,并查詢所述未被標(biāo)記為結(jié)束的請求,并標(biāo)記為疑似崩潰請求。
所述崩潰確認(rèn)模塊還用于:
比對疑似崩潰請求,判斷是否一致;
若不一致,則記錄所有疑似崩潰請求,并返回步驟“網(wǎng)站再次崩潰時,獲得另一個疑似崩潰請求”。
舉個例子,在每一個請求發(fā)送到服務(wù)端時,通過Spring MVC的中定制攔截器的開始請求事件,對請求內(nèi)容進(jìn)行記錄,并生成唯一標(biāo)識標(biāo)記當(dāng)前請求;
在請求正常結(jié)束和異常結(jié)束事件,根據(jù)所生成的唯一標(biāo)識找到對應(yīng)的請求,將其標(biāo)記為結(jié)束;
當(dāng)網(wǎng)站崩潰時,自動重啟網(wǎng)站,查詢網(wǎng)站崩潰時間點(diǎn)前最后一個未標(biāo)記結(jié)束的請求,并標(biāo)記為疑似崩潰請求;
等網(wǎng)站出現(xiàn)第二次崩潰后,將第一次崩潰后到第二次崩潰前最后一個的未標(biāo)記結(jié)束的請求與前一次進(jìn)行比較,如果完全一致,則將此請求標(biāo)記為會導(dǎo)致崩潰的請求;若不一致,則暫不作處理,記錄上述兩個疑似崩潰請求;
若網(wǎng)站出現(xiàn)第三次崩潰,則對應(yīng)的獲得第三個疑似崩潰請求,將其與前述兩個疑似崩潰請求一一比對,直到比對一致,確認(rèn)有兩個相同的請求為導(dǎo)致崩潰的請求為止,否則,繼續(xù)獲得后續(xù)的疑似崩潰請求,并與之前記錄的所有疑似崩潰請求進(jìn)行一一比對;
在確認(rèn)導(dǎo)致崩潰的請求后,之后的所有請求都與被標(biāo)記為會導(dǎo)致崩潰的請求比較,如果一致,則暫不執(zhí)行這個請求,即被標(biāo)記為會導(dǎo)致崩潰的請求,以防止崩潰,否則,執(zhí)行該請求,并判斷是否出現(xiàn)崩潰;若再次崩潰,則將這個請求作為疑似崩潰請求,并與之前的疑似崩潰請求比對,返回上述步驟,直到獲得下一個導(dǎo)致崩潰的請求。
在后續(xù)的所有請求都需要與所有導(dǎo)致崩潰的請求進(jìn)行比對,步驟同上,此處不再贅述。
以上所述僅為本發(fā)明的實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等同變換,或直接或間接運(yùn)用在相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。