繁体   English   中英

如何通过按钮单击从 jsp 页面停止 servlet 处理

[英]How to stop servlet processing from jsp page by button click

我创建了一个调用 servlet 的 JSP 页面。 该 servlet 的总处理时间至少为 5 分钟。 在该 servlet 进程完全完成之前,我想停止该进程并再次使用不同的参数进行调用。

我想从我的 JSP 页面单击一个按钮,该按钮可以停止 servlet 的整个进程。

您可以使用 java 执行器框架来完成。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM