Я использую JSP и сервлеты. На одной из моих jsp-страниц я вызову файл .sh, который будет выполняться в течение 2-3 минут, а после завершения процесса он будет перенаправлен на другую jsp-страницу. Моя проблема в том, что пользователю приходится ждать 2-3 минуты, а затем после завершения процесса только он перенаправляется на следующую страницу. Я не хочу, чтобы это произошло, я хочу запустить этот процесс, который должен работать в фоновом режиме, и я хочу, чтобы страница была немедленно перенаправлена.
страница процесса.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, может ли кто-нибудь сказать, как я могу этого добиться? Могу ли я добиться этого с помощью потока? Если да, то как? Кто-нибудь, пожалуйста, объясните мне пример того же сценария.
p.waitFor();
. Это фактически заставит этот поток ждать, пока процесс не завершится. Попробуйте этот способ и посмотрите, работает ли он. Я только сейчас заметил это. 17.06.2014