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