如何通过单击按钮

我创建了一个调用servlet的JSP页面。该Servlet的总处理时间最少为5分钟。在该Servlet的过程完全完成之前,我想停止该过程,然后再次希望使用其他参数进行调用。

我想从JSP页面中单击一个按钮,这将停止servlet的整个过程。

as3861701 回答:如何通过单击按钮

您可以使用Java执行程序框架来实现。

  1. 创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(10);
  1. 将繁重的任务放入新线程中,然后将其提交给executorService,该服务将为您处理并返回Feature任务。并将此功能保存在会话中
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();
  1. 通过按钮调用停止网址时,您可以从会话中找到您的任务并将其取消
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,也将被取消阻止

本文链接:https://www.f2er.com/3160162.html

大家都在问