我创建了一个调用servlet的JSP页面。该Servlet的总处理时间最少为5分钟。在该Servlet的过程完全完成之前,我想停止该过程,然后再次希望使用其他参数进行调用。
我想从JSP页面中单击一个按钮,这将停止servlet的整个过程。
我创建了一个调用servlet的JSP页面。该Servlet的总处理时间最少为5分钟。在该Servlet的过程完全完成之前,我想停止该过程,然后再次希望使用其他参数进行调用。
我想从JSP页面中单击一个按钮,这将停止servlet的整个过程。
您可以使用Java执行程序框架来实现。
ExecutorService executorService = Executors.newFixedThreadPool(10);
Future<String> startedTask = executorService.submit(() -> {
System.out.println(Thread.currentThread().getName() + " started!");
try {
Thread.sleep(2 * 60 * 1000);//TODO: here goes your heavy task which tooks long to process
} catch (InterruptedException e) {
e.printStackTrace();
}
return "completed at " + System.currentTimeMillis();//here you can return your results if you need any
});
session.setAttribute(ATTRIBUTE_NAME_WORKING_TASK,startedTask);
另外,如果您想在servlet处理过程中阻塞UI,则可以在上一行之后调用以下方法(我认为没有人愿意这样做)
String result = startedTask.get();
Object task = session.getAttribute(ATTRIBUTE_NAME_WORKING_TASK);
if (task == null)
return "Task doesnt exists";
if (task instanceof Future)
((Future<String>) session.getAttribute(ATTRIBUTE_NAME_WORKING_TASK)).cancel(true);
这将取消您的任务,即使您已阻止正在等待servlet进程的UI,也将被取消阻止