如何让servlet容器(Tomcat)中断/销毁servlet请求?

时间:2009-12-24 18:57:45

标签: java servlets

我是Servlet的新手,我使用下面的代码来读取一些inputStream,

class MyServlet implements Servlet{
  void service(ServletRequest req, ServletResponse res){
  InputStream inA, inB, inC;
   //...
   inA.read(); // May block
   inB.read(); // May block
   inC.read(); // May block
   // ...
   }
 }

如何让servlet容器(Tomcat)在一段可配置的时间后中断/销毁MyServlet。在这种情况下,它会调用哪种方法?

提前谢谢,,,

3 个答案:

答案 0 :(得分:2)

我不相信你可以使用Tomcat(或其他servlet引擎)来做到这一点。

最简单的方法可能是在单独的线程中生成耗时的进程,在该调用上调用该进程并超时。您可以使用FutureTask对象并在其上调用get(),指定超时,轻松完成此操作。如果任务花费的时间过长,您将获得TimeoutException,并且您可以使用servlet向用户报告(很好)。

e.g。 (很简单)

FutureTask f = new FutureTask(new Runnable{...});
try {
   Object o = f.get(TIMEOUT, UNITS)
   // report success
}
catch (TimeoutException e) {
   // report failure
}

答案 1 :(得分:1)

你不会调用那些方法,容器就是这样。

我想知道你为什么会这样做。你真的想在每次请求时重新阅读这些文件吗?如果你需要这些内容,我宁愿你看到你在init方法中读取它们并缓存它们。

答案 2 :(得分:0)

这可能是不使用自己的线程的最佳近似值:服务方法可以抛出javax.servlet.UnavailableException,这将向容器表明servlet暂时或永久不可用。