销毁servlet

访客4年前黑客文章591

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米代金券、领会最新阿里云产物的种种优惠流动点击进入

相关文章

世界最大的黑客组织(世界最大的黑客组织地址在哪)

世界最大的黑客组织(世界最大的黑客组织地址在哪)

本文目录一览: 1、世界黑客排名是怎样的? 2、世界最大的黑客组织 3、世界十大黑客组织都是哪些 4、世界最大黑客组织是好人吗? 5、全球最厉害的黑客组织 世界黑客排名是怎样的? 世...

豆腐怎么卖更赚钱吗?做豆腐挣钱吗

豆腐怎么卖更赚钱吗?做豆腐挣钱吗

豆腐想必是大多数家庭的日常食品,而大多数人的印象里卖豆腐就应该推一个小车卖,怎么可能卖出五个亿,远销至美、英、德、澳等十数个个国家呢?这个几乎不可能的事情却被一个人做到了,并创建了中国最大的和最先进的...

恢复微信 聊天记录(恢复微信 聊天记录免费)

恢复微信 聊天记录(恢复微信 聊天记录免费)很多人误删了苹果手机上的重要微信聊天记录后,想对其进行恢复,却感觉束手无策,其实要找回这些记录,有四种不同的方法,这些方法各有优缺点,可根据自己的实际情况,...

黑客长壁纸(黑客软件壁纸)

黑客长壁纸(黑客软件壁纸)

本文目录一览: 1、谁给我一个黑客帝国动态数字雨大图桌面壁纸? 2、求黑客帝国壁纸4K一刻相册资源~跪求!谢谢!!! 3、求黑客帝国:矩阵重启壁纸无水印资源~高清的最好,谢谢!! 4、求黑...

信用卡逾期会坐牢吗(信用卡逾期抓人流程)

  提起诉讼并不是银行的信用卡的最后方法,仅仅一个可选方式之一。假如每一单不还贷都去提起诉讼,那人民法院不变为银行的信用卡管理中心人民法院了?那金融机构得有几个去承担贷后提起诉讼啊?   贷款逾期后...

新版100元人民币已运至各地!揭秘印制过程

在北京白纸坊街有一处外型一般的五层工业厂房,却武警部队镇守,工业厂房里设备轰隆,恒温恒湿设备,还未资金投入商品流通的100元新钞正从印刷设备里髙速“吐”出……薄纸“变”纸币,这并不是魔术师。2015年...