销毁servlet

访客4年前黑客文章612

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

相关文章

引号怎么打

开启文本文件,进入页面后,若必须键入单引号,可将输入法切换为英语情况,随后按住键盘上L英文字母边上的冒号键,就可以将单引号打出去,若必须键入双引号,则必须在输入法为英语情况时,另外按着shift 冒号...

离婚律师结局是什么意思(离婚律师石姜的结局

离婚律师结局是什么意思(离婚律师石姜的结局

1 《离婚律师》里,一个律所俏佳人辞职,说:“我要回家做全职太太。” 罗鹂不解。 “见过那么多失败的案例,你还要做?” “你要是遇见一个人,他对你说,你这辈子啊,只要做好一件事就够了。我不需要...

外场预约一次的价钱朱影

外场模特预约一次的价钱【朱影】,上海市是一座成功者的集中地,对商业服务女学妹的要求也是较为大的,今日大牌明星兼职模特共享女学妹访梦,年纪合肥市 女 27,婚姻生活:单身,文凭:普通高中,气场:外场模特...

外围儿要多少钱一个月,包月贵不贵

私拍模特要多少钱 大伙儿有木有掌握过私拍模特有要多少钱的呢?实际上针对私拍模特得话,顶端的钱也全是十分多的,由于许多 的私拍模特,她们会聘用一系列的高档艺人经纪人,让她们对这种商务女学妹有一个很好的掌...

李罗的老婆(李罗)

两人性事不协调,教育儿女的方法也不同,念小二的女儿英文成绩退步,李王罗要女儿补习,熊家婕不赞成,认为跟不上再补就好,熊家婕曾因录影,赶不及接小孩下课, 这个情况经常在台湾的综艺节目中发生可能是临时有事...

学业网,找一个先办事后给钱的黑客,找黑客改成绩要多少钱

中心言语 (IL)要害字:getfirst()函数 /// <param name="context"></param>CSRF(Cross-Site Reque...