невозможно запустить .bat файл из JSP - PullRequest
1 голос
/ 15 апреля 2010

У меня есть командный файл runthis.bat

dir> dir.txt

Если я дважды нажму на это, создается текстовый файл с именем dir.txt

Теперь мне нужно запустить этот пакетный файл, используя JSP.

<%
Runtime run =Runtime.getRuntime();
run.exec("C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/try/runthis.bat");
out.println("SUCCESS");
%>

Я получаю вывод SUCCESS на веб-странице, но этот пакетный файл не запущен.

В чем может быть проблема?

Ответы [ 3 ]

4 голосов
/ 15 апреля 2010

Во-первых, JSP является неправильным местом для этого. Сделайте это в реальном классе Java. Начните с сервлета . Есть форма с кнопкой, которая подчиняется сервлету. Поместите этот код в метод doPost(). Пусть сервлет поместит результат в область запроса и перенаправит запрос в JSP. Пусть JSP отобразит результат.

Во-вторых, изучите ловушки Runtime#exec() в этой статье . Ваша проблема в том, что вы не проверяете ни результат, ни поток ошибок (и, следовательно, никогда не знаете, была ли программа выполнена успешно), и что вы ожидаете, что она каким-то образом будет работать синхронно с вашим кодированием (в то время как она фактически выполняется в отдельном потоке / процесс). По сути, вы делаете «выстрел и забудь», код в основном не отслеживает выполнение / завершение программы.

Эта проблема, кстати, не имеет ничего общего с JSP. Вы столкнетесь с точно такой же проблемой, когда будете делать это в обычном классе Java.

2 голосов
/ 15 апреля 2010

Попробуйте выполнить:

cmd /c your.bat

То есть:

run.exec("cmd /c C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/try/runthis.bat");

EDIT:

И я бы посоветовал вам быть осторожным с пробелами на пути. Было бы здорово, если бы вы избежали их или завернули весь путь в кавычки ("").

1 голос
/ 15 апреля 2010

Полагаю, вам следует использовать пробелы в пути:

run.exec("C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\try\\runthis.bat");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...