Как я могу запустить командный файл на сервере из Java? - PullRequest
1 голос
/ 13 февраля 2009

Можно ли разрешить клиенту нажать кнопку, а затем запустить пакетный файл для запуска на сервере? Я могу запустить пакетный файл на сервере изнутри серверного компьютера, но я хочу запустить его на сервере, но запустить с клиентского компьютера с веб-сайта. Как бы я это сделал?

Ответы [ 5 ]

3 голосов
/ 13 февраля 2009

Вопрос о том, как ваш клиент взаимодействует с вашим сервером. В любом случае, я предполагаю, что приложение сервлета может считаться веб-приложением, но у вас будет браузер, а клиентом не станет.

Итак, после получения этого конкретного запроса просто запустите тот метод, который предполагает выполнение командного файла. В чем проблема. ИЛИ мы можем уточнить, можете ли вы рассказать об архитектуре вашего приложения и о том, как клиент взаимодействует с сервером.

1 голос
/ 13 февраля 2009

Да, вы можете.

Предполагая, что это веб-приложение, вы можете просто заставить JSP-страницу / сервлет выполнить ту же операцию, что и на сервере.

Единственная проблема заключается в том, что вам, возможно, придется выполнять его асинхронно (т. Е. Ваш сервлет помещает запрос на выполнение пакетной задачи) и возвращает обратно для обновления пользовательского интерфейса. Это особенно важно, если ваша пакетная задача выполняется долго.

0 голосов
/ 14 февраля 2009

Задолго до появления «Серверов приложений», веб-серверы выполняли серверные сценарии, основанные на вводе данных на стороне клиента. Вот что такое CGI. Излишне говорить, что когда люди начали разрабатывать серверы приложений, они наверняка включили в них какой-то способ доступа к возможностям CGI, к которым привыкли веб-разработчики.

Таким образом, ответ на ваш вопрос заключается в том, что вы почти наверняка можете запустить серверный сценарий на основе ввода на стороне клиента. Проблема с ответом на ваш вопрос заключается в том, что вы на самом деле никому не сказали, какова ваша серверная сторона. Знание того, на какой операционной системе работает ваш сервер приложений, также важно, чтобы дать вам полный ответ.

Поскольку ваш вопрос размещен под тегом Java, все предполагают, что на вашем сервере находится какой-то сервер приложений J2EE. Если это так, то все ответы до сих пор дают хорошие подсказки о том, что вам нужно сделать. (Если вы не работаете на сервере приложений, вам нужно изучить возможности CGI вашего веб-сервера (и изменить свой тег на CGI).)

Ответ Скотта говорит вам старый способ выполнения вашего скрипта или любого исполняемого файла. Ответ Kalecser говорит вам более новый «кошерный» способ сделать это. gnlogic и Vinegar предлагают вашему серверу приложений встроенный API для этого.

gnlogic также поднимает точку синхронизации. Я не могу комментировать неизвестный API сервера приложений, но Runtime.exec и ProcessBuilder создают асинхронный процесс. Работа с асинхронным процессом - это совершенно другой вопрос.

0 голосов
/ 13 февраля 2009

Вы можете вызвать командный файл из сервлета с помощью ProcessBuilder.

 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory("myDir");
 Process p = pb.start();

http://www.java -tips.org / Java-се-советы / java.util / из-Runtime.exec к processbuilder.html

Edit: вы всегда можете прочитать stdout, stderr и код возврата процесса, используя p.getOutputStream (), p.getErrorStream () Если вам нужно написать в stdin, используйте p.getInputStream ().

0 голосов
/ 13 февраля 2009

Похоже, что вы действительно ищете, это exec . Такие как:

    Runtime rt = Runtime.getRuntime();
    try {
        rt.exec("ifconfig");
    } catch (IOException e) {
        e.printStackTrace();
    }

Вызовите это с помощью нажатия кнопки или любого другого события, которым вы запускаете событие. Я не уверен, как получить что-нибудь обратно, но это другое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...