【问题标题】:How to run a process in background and redirect a jsp page如何在后台运行进程并重定向jsp页面
【发布时间】:2014-06-17 08:20:08
【问题描述】:

我正在使用 Jsp 和 servlet。在我的一个 jsp 页面中,我将调用一个 .sh 文件,该文件将执行 2-3 分钟,并且在该过程完成后它将重定向到另一个 jsp 页面。 我的问题是用户必须等待 2-3 分钟,然后在流程完成后只有他被重定向到下一页。我不希望发生这种情况我想启动必须在后台运行的进程,并且我希望页面立即被重定向。

process.jsp 页面

FileWriter fileWriter = new FileWriter(file3,true);
BufferedWriter bufferFileWriter  = new BufferedWriter(fileWriter);
fileWriter.append(userid+"\t"+movie_id[i]+"\t"+ratings[i]);
fileWriter.append('\n');
bufferFileWriter.close();

Process p=Runtime.getRuntime().exec("/home/yoganandhd/project.sh");
p.waitFor();

response.sendRedirect("login.jsp");

在上面的代码中,执行 project.sh 需要 3 分钟,它会执行一些数据挖掘过程,然后只有它被重定向到 login.jsp 页面。 我的要求是用户不能等待 3 分钟,必须通过在后台运行 project.sh 立即将他重定向到下一页。

我是一个新手,我对 java 不太了解,谁能说我怎么能做到这一点? 我可以使用线程来实现这一点吗?如果是怎么办? 有人请用相同场景的示例向我解释一下。

【问题讨论】:

  • 考虑在线程完成时使用 websocket 接收通知。还要避免在jsp中使用代码,而是使用servlet
  • 同意@ScaryWombat。此外,这不是很实用。没有人等待 3 分钟加载页面。考虑一个带有 AJAX 更新的进度页面。
  • @ScaryWombat 非常感谢你,我会采纳你的建议并使用 servlet。能不能给我一个小例子说明如何使用websocket来接收。
  • @NickJ 感谢您的宝贵意见。我是java新手,我是java基础知识的新手。你能建议或给我一个关于如何使用 AJAX 来解决我的问题的例子吗?

标签: java multithreading jsp servlets


【解决方案1】:

您可以创建一个新线程并单独执行shellscript。

public class MyThread extends Thread {

   public void run(){
      Process p=Runtime.getRuntime().exec("/home/yoganandhd/project.sh");
      p.waitFor();
   }
}

现在从您的实际流程中调用此线程,如下所示,而不是直接调用作业。

MyThread myThread = new MyThread();
myThread .start();

【讨论】:

  • 这只能解决一半的问题,但不是。
  • @ScaryWombat,这不能解决的另一半?这将在单独的线程中执行作业,而主线程将重定向到 login.jsp。我认为这就是 OP 想要的。
  • 我读到需要一些数据挖掘才能向用户显示一些数据。
  • @ScaryWombat,在否决答案之前正确阅读问题。他告诉他需要立即重定向到 login.jsp 而无需等待。他没有提到他需要在数据挖掘完成后向用户显示一些数据。
  • @Dinal,是的,你的仪式我想立即重定向它。我尝试了一个类似的代码,它正在重定向到下一页,但它没有执行 shell 脚本。当我尝试在 shell 中手动执行 shell 脚本时,它工作正常,但使用线程却不工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 2011-08-31
  • 1970-01-01
  • 2015-07-24
相关资源
最近更新 更多