我是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。在这种情况下,它会调用哪种方法?
提前谢谢,,,
答案 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暂时或永久不可用。