摘要:當(dāng)被移除時(shí),它的方法必須全部執(zhí)行完成。服務(wù)器在所有請(qǐng)求被響應(yīng)或者在一個(gè)特定時(shí)間后,通過調(diào)用方法確保這一點(diǎn)的實(shí)現(xiàn)。做到這一點(diǎn)的一部分是檢查的數(shù)量??赡苄枰L(zhǎng)期運(yùn)行的方法需要檢查通知他們關(guān)閉的變量并在需要時(shí)強(qiáng)制打斷正在執(zhí)行的工作。
web容器可能決定一個(gè)Servlet是否從servic中移除(例如,當(dāng)一個(gè)容器想要回收內(nèi)存資源時(shí)或者被關(guān)閉時(shí))。在上面的場(chǎng)景中,容器會(huì)調(diào)用Servlet接口的destroy方法。在方法中,可以釋放servlet使用的任何資源,保存持久化狀態(tài)。destroy方法關(guān)閉在init方法中創(chuàng)建的數(shù)據(jù)庫對(duì)象。
當(dāng)servlet被移除時(shí),它的service方法必須全部執(zhí)行完成。服務(wù)器在所有請(qǐng)求被響應(yīng)或者在一個(gè)特定時(shí)間后,通過調(diào)用destroy方法確保這一點(diǎn)的實(shí)現(xiàn)。當(dāng)你的servlet正在執(zhí)行超過服務(wù)器超時(shí)時(shí)間的長(zhǎng)任務(wù)時(shí),這些操作直到destroy方法被調(diào)用前都在執(zhí)行。你必須確保任何持有客戶端請(qǐng)求的線程完成。
本節(jié)的其余部分將介紹如何執(zhí)行以下操作:
保持跟蹤當(dāng)前有多少線程在運(yùn)行service方法
通過destroy方法通知長(zhǎng)時(shí)間運(yùn)行的線程關(guān)閉并等待完成來提供一個(gè)干凈的關(guān)閉方法
讓長(zhǎng)時(shí)間運(yùn)行的方法定期輪詢以檢查關(guān)閉,并在必要時(shí)停止工作,清理和返回
跟蹤服務(wù)請(qǐng)求要跟蹤服務(wù)請(qǐng)求,需要在servlet類中包含一個(gè)變量,這個(gè)變量用來統(tǒng)計(jì)運(yùn)行的service方法數(shù)量。這個(gè)變量需要使用同步方法增量、減量和返回變量值。
public class ShutdownExample extends HttpServlet { private int serviceCounter = 0; ... // Access methods for serviceCounter protected synchronized void enteringServiceMethod() { serviceCounter++; } protected synchronized void leavingServiceMethod() { serviceCounter--; } protected synchronized int numServices() { return serviceCounter; } }
當(dāng)每次進(jìn)入service方法時(shí)都需要增長(zhǎng)變量值,每次離開service方法時(shí)都需要減小變量值。這是你要在HttpServlet子類覆寫父類service方法的原因之一。新方法需要調(diào)用super.service()保留原始的service方法的內(nèi)容。
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException { enteringServiceMethod(); try { super.service(req, resp); } finally { leavingServiceMethod(); } }通知方法關(guān)閉
為了確保一個(gè)干凈的關(guān)閉,在所有請(qǐng)求完成前你的service方法不能釋放任何共享資源。做到這一點(diǎn)的一部分是檢查service的數(shù)量。另外一部分是通知長(zhǎng)時(shí)間運(yùn)行的任務(wù)是時(shí)候關(guān)閉了。為了能通知到位,需要另一個(gè)變量。這個(gè)變量需要有通常的訪問方法。
public class ShutdownExample extends HttpServlet { private boolean shuttingDown; ... //Access methods for shuttingDown protected synchronized void setShuttingDown(boolean flag) { shuttingDown = flag; } protected synchronized boolean isShuttingDown() { return shuttingDown; } }
下面是一個(gè)使用這些變量提供干凈的關(guān)閉方法的示例:
public void destroy() { /* Check to see whether there are still service methods /* /* running, and if there are, tell them to stop. */ if (numServices()> 0) { setShuttingDown(true); } /* Wait for the service methods to stop. */ while (numServices()> 0) { try { Thread.sleep(interval); } catch (InterruptedException e) { } } }創(chuàng)建規(guī)范的長(zhǎng)期運(yùn)行方法
提供干凈關(guān)閉的最后一步是使任何長(zhǎng)時(shí)間運(yùn)行的方法都比較規(guī)范??赡苄枰L(zhǎng)期運(yùn)行的方法需要檢查通知他們關(guān)閉的變量并在需要時(shí)強(qiáng)制打斷正在執(zhí)行的工作。
public void doPost(...) { ... for(i = 0; ((i < lotsOfStuffToDo) && !isShuttingDown()); i++) { try { partOfLongRunningOperation(i); } catch (InterruptedException e) { ... } } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74233.html
摘要:實(shí)際開發(fā)中最常見的和方法配置文件配置文件如下引用百度定義 Servlet全解析筆記 Servlet(Server Applet)是Java Servlet的簡(jiǎn)稱,稱為小服務(wù)程序或服務(wù)連接器,用Java編寫的服務(wù)器端程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,主要功能在于交互式地瀏覽和生成數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容,Servlet的常見類型有,繼承自Httpservlet的普通Servlet類、Se...
摘要:協(xié)議版本請(qǐng)求頭客戶端向服務(wù)器端表示,我能支持什么類型的數(shù)據(jù)。在地址欄上輸入項(xiàng)目名稱向報(bào)告,我這個(gè)應(yīng)用里面有這個(gè),名字叫做具體的路徑是注冊(cè)的映射。的配置,通過這個(gè)對(duì)象,可以獲取在配置的時(shí)候一些信息先說,在寫怎么用,最后說有什么用。 1.Http協(xié)議 什么是協(xié)議 雙方在交互、通訊的時(shí)候, 遵守的一種規(guī)范、規(guī)則。 http協(xié)議 針對(duì)網(wǎng)絡(luò)上的客戶端 與 服務(wù)器端在執(zhí)行http請(qǐng)求的時(shí)候...
摘要:中的異步處理指的是什么中的異步處理指的是什么答在中引入了一項(xiàng)新的技術(shù)可以讓異步處理請(qǐng)求。開啟異步處理代碼開啟異步支持啟動(dòng)異步處理的上下文在此處添加異步處理的代碼如果文章有錯(cuò)的地方歡迎指正,大家互相交流。 以下我是歸納的過濾器監(jiān)聽器知識(shí)點(diǎn)圖: showImg(https://segmentfault.com/img/remote/1460000013263166?w=3974&h=187...
摘要:系列文章請(qǐng)查看超詳細(xì)的面試題總結(jié)一之基礎(chǔ)知識(shí)篇超詳細(xì)的面試題總結(jié)二之基礎(chǔ)知識(shí)篇超詳細(xì)的面試題總結(jié)三之集合篇常見問題下面的都是自己之前在學(xué)習(xí)的時(shí)候總結(jié)的,對(duì)于鞏固的基礎(chǔ)知識(shí)應(yīng)該有很大幫助。注意多線程的并發(fā)的讀寫類屬性會(huì)導(dǎo)致數(shù)據(jù)不同步。 系列文章請(qǐng)查看: 超詳細(xì)的Java面試題總結(jié)(一)之Java基礎(chǔ)知識(shí)篇 超詳細(xì)的Java面試題總結(jié)(二)之Java基礎(chǔ)知識(shí)篇 超詳細(xì)的Java面試題總結(jié)(...
摘要:個(gè)人的學(xué)習(xí)筆記是的簡(jiǎn)稱,是運(yùn)行在服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來自瀏覽器或其他客戶端的請(qǐng)求和服務(wù)器上的數(shù)據(jù)庫或應(yīng)用程序之間的中間層,就是一個(gè)類,運(yùn)行在服務(wù)器上。處理數(shù)據(jù)并生成結(jié)果。所有的文件都必須遵守這個(gè)標(biāo)準(zhǔn)。 個(gè)人的學(xué)習(xí)筆記 Servlet(Server Applet)是Java Servlet的簡(jiǎn)稱,是運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來自 Web 瀏覽器...
閱讀 3162·2021-11-23 10:02
閱讀 3131·2021-11-16 11:53
閱讀 3108·2021-09-23 11:21
閱讀 3383·2019-08-30 13:02
閱讀 1641·2019-08-29 16:18
閱讀 1571·2019-08-29 12:55
閱讀 1469·2019-08-26 12:24
閱讀 2097·2019-08-26 10:36