簡體   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