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

Java 如何通过单击按钮从jsp页面停止servlet处理,java,jsp,servlets,Java,Jsp,Servlets,我创建了一个调用servlet的JSP页面。该servlet的总处理时间至少为5分钟。在该servlet的进程完全完成之前,我想停止该进程并再次使用不同的参数调用 我想在我的JSP页面中单击一个按钮,该按钮使servlet停止整个进程。您可以使用java executor框架来完成 创建线程池 将繁重的任务放入新线程中,并将其提交给executorService,executorService将为您处理并返回特性任务。并在会话中保存此功能 当您通过按钮调用StopURL时,您可以从会话中找到您的

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


我想在我的JSP页面中单击一个按钮,该按钮使servlet停止整个进程。

您可以使用java executor框架来完成

  • 创建线程池
  • 将繁重的任务放入新线程中,并将其提交给executorService,executorService将为您处理并返回特性任务。并在会话中保存此功能
  • 当您通过按钮调用StopURL时,您可以从会话中找到您的任务并取消它
  • Object task=session.getAttribute(属性\名称\工作\任务);
    如果(任务==null)
    返回“任务不存在”;
    if(未来的任务实例)
    ((Future)session.getAttribute(ATTRIBUTE\u NAME\u WORKING\u TASK)).cancel(true);
    

    这将取消您的任务,即使您已阻止等待servlet进程的UI,该进程也将被取消阻止

    有什么问题?您的UI已冻结,或者您要求找到能够取消servlet处理的解决方案?Vasif,是的,我希望能够取消servlet处理。
    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);
    
    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);