销毁servlet

访客3年前黑客文章566

web容器可能决议一个Servlet是否从servic中移除(例如,当一个容器想要接纳内存资源时或者被关闭时)。在上面的场景中,容器会挪用Servlet接口的destroy方式。在方式中,可以释放servlet使用的任何资源,保留持久化状态。destroy方式关闭在init方式中建立的数据库工具。 

当servlet被移除时,它的service方式必须所有执行完成。服务器在所有请求被响应或者在一个特定时间后,通过挪用destroy方式确保这一点的实现。当你的servlet正在执行跨越服务器超时时间的长义务时,这些操作直到destroy方式被挪用前都在执行。你必须确保任何持有客户端请求的线程完成。 

本节的其余部分将先容若何执行以下操作:

  • 保持跟踪当前有若干线程在运行service方式
  • 通过destroy方式通知长时间运行的线程关闭并守候完成来提供一个清洁的关闭方式
  • 让长时间运行的方式定期轮询以检查关闭,并在必要时停止事情,清算和返回


跟踪服务请求

要跟踪服务请求,需要在servlet类中包罗一个变量,这个变量用来统计运行的service方式数目。这个变量需要使用同步方式增量、减量和返回变量值。

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;
    }
}

当每次进入service方式时都需要增进变量值,每次脱离service方式时都需要减小变量值。这是你要在HttpServlet子类覆写父类service方式的缘故原由之一。新方式需要挪用super.service()保留原始的service方式的内容。

protected void service(HttpServletRequest req,
                       HttpServletResponse resp)
                       throws ServletException,IOException {
    enteringServiceMethod();
    try {
        super.service(req, resp);
    } finally {
        leavingServiceMethod();
    }
}


通知方式关闭

为了确保一个清洁的关闭,在所有请求完成前你的service方式不能释放任何共享资源。做到这一点的一部分是检查service的数目。另外一部分是通知长时间运行的义务是时刻关闭了。为了能通知到位,需要另一个变量。这个变量需要有通常的接见方式。

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;
    }
}

下面是一个使用这些变量提供清洁的关闭方式的示例:

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) {
        }
    }
}


建立规范的历久运行方式

提供清洁关闭的最后一步是使任何长时间运行的方式都对照规范。可能需要历久运行的方式需要检查通知他们关闭的变量并在需要时强制打断正在执行的事情。

public void doPost(...) {
    ...
    for(i = 0; ((i < lotsOfStuffToDo) &&
         !isShuttingDown()); i++) {
        try {
            partOfLongRunningOperation(i);
        } catch (InterruptedException e) {
            ...
        }
    }
}
思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

相关文章

Win10市场份额接近8% 增速开始放缓

据外国媒体VentureBeat近日报导,历经微软公司的大力发展,加上Win10完全免费以后,新一代Windows 10电脑操作系统从9月初公布至今,迄今的市场占有率早已升到近8%。 发售后前四周,...

黑客桌面苹果手机(黑客苹果手机软件)

黑客桌面苹果手机(黑客苹果手机软件)

本文导读目录: 1、苹果手机被黑客远程控制怎么办? 2、iphone手机怎样远程监视桌面,就是看到对方手机屏幕显示。知道icloud账号密码 3、苹果手机应用在桌面删除了在系统里删不掉+在设置...

遛狗老人被高空坠猫砸晕怎么回事?现场图片详情曝光真天降横祸

遛狗老人被高空坠猫砸晕怎么回事?现场图片详情曝光真天降横祸

近日,高爷爷和往常一样在路上遛狗,却遇到了“飞天”横祸,一只猫从天而降砸中了高爷爷,被砸中后他直接昏迷在地,而他的宠物金毛,堵住了嫌疑“猫”。 老人和往常一样去小区楼下遛狗,正慢悠悠地走在路上时...

yes黑客联盟,冰点黑客联系,苹果id找黑客

德国的据点树立在2019年12月,但在本年3月才开端布置C&C环境,然后一向坚持活泼至今。 Target(方针)——显现方针目录结构的的一个功用b374k shell packer 0.4以0...

怎么破解微信密码呢,怎样盗取别人的微信密码教程

怎么破解qq密码呢,如何窃取他人的qq密码实例教程 即然微信是实名验证和和储蓄卡绑定,如今难以盗取别人的微信了,腾讯官方也严苛查验了这些方面,这不会再很有可能。 我们可以偷他人的微信吗? 如何把另...

一套完整的网站运营方案(纯干货)影响网站的

一套完整的网站运营方案(纯干货)影响网站的

SEO总是说,网站不收录,但是归根结底,还是因为网站中的小问题没有处理掉,才会让百度蜘蛛爱答不理,面对这样的问题,SEO就应该根据自身网站的情况,看一下是否你在这方面的优化操作,存在一定的缺失,只要妥...