java - 如何在后台运行进程并重定向jsp页面

标签 java multithreading jsp servlets

我正在使用 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不太了解,有人能告诉我如何实现这一点吗? 我可以使用线程来实现这一点吗?如果是的话怎么办? 请有人用相同场景的示例向我解释一下。

最佳答案

您可以创建一个新线程并单独执行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();

关于java - 如何在后台运行进程并重定向jsp页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24258937/

相关文章:

java - 为什么Interface不能实例化却可以创建接口(interface)实例变量?

java - Java 或 C# 中是否存在命名空间污染(如在 C++ 中)?

java - com.ibm.jsse2.util.j : Certificate chaining error while accessing a page through https in notes agent

javascript - 如何在 JavaScript 中创建后台线程

java - 想上传一个文件到一个文件夹,获取上传的文件名

java - 如何从 servlet 获取给定 URL 的来源?

java - 如何在 jsp 页面中访问我在 servlet 类中声明的自定义对象

java - jFrame新线程

objective-c - OSAtomicIncrement32 锁定什么?

java - 我想从下拉列表中传递值的表单中应该使用什么 Spring Form 支持对象?