Вызов Lynx из сценария JSP
Вопрос
У меня есть выполнение (String CMD) в сценарии JSP, который вызывает метод EXEC от класса выполнения.
Он работает, когда я называю локальную команду, как скрипт PHP, хранящийся на сервере. Например: / usr / bin / php / path / to / php / script arg1 arg2
Поэтому я предполагаю, что моя команда Execute в порядке, поскольку это работает с этим.
Теперь, когда я пытаюсь позвонить в Lynx, текстовый веб-браузер, он не работает.
Если я назову это в терминале, он работает нормально: / usr / bin / lynx -dump -accept_all_cookies 'http://www.someurl.net/?Arg1=1&arg2=2.'
Но когда я называю это из моей команды Execute, ничего не происходит ...
Любая идея почему?
Это мой метод Execute:
public String execute(String cmd){
Runtime r = Runtime.getRuntime();
Process p = null;
String res = "";
try {
p = r.exec(cmd);
InputStreamReader isr = new InputStreamReader(p.getInputStream());
BufferedReader br = new BufferedReader(isr);
String line = null;
//out.println(res);
while ((line = br.readLine()) != null) {
res += line;
}
p.waitFor();
} catch (Exception e) {
res += e;
}
System.out.println(p.exitValue());
return res;
}
Решение 2
Я решил это .... вызывая Lynx в сценарий PHP, PHP-скрипт, который я позвонил из сценария JSP ...
Это дерьмовое решение, но, по крайней мере, он работает ... Я до сих пор не понимаю, почему команда Exec от Java работает таким образом ...
Спасибо за вашу помощь в любом случае Andrzej (чеш, я думаю, от имени ..? ^ _ ^), Как-то вы поставили меня на пути!
Другие советы
Вам нужно прочитать из Process
«Выходной поток.
Поскольку вы нет, основной процесс Lynx, скорее всего, блокирует при записи вывода, ожидая, что кто-то будет опустошить буфер вывода. Даже если вы собираетесь игнорировать вывод, вам нужно все равно прочитать его в любом случае для процесса для выполнения, сколько вы ожидаете.
Как то Javadocs процесса Скажем, «потому что некоторые родные платформы предоставляют только ограниченный размер буфера для стандартных входных и выходных потоков, отказа, чтобы немедленно написать входной поток или прочитать выходной поток подпроцесса, может привести к тому, что подпроцессу блокируется и даже тупик».
Видеть http://www.javavorld.com/javaworld/jw-12-2000/jw-1229-traps.html. Для некоторых примеров того, как справиться с этим.
Редактировать: Если вы задаетесь вопросом, шансы заключаются в том, что когда вы вызывали PHP-скрипт, он не произвел много вывода, и поэтому смог прекратить расторгнуть перед заполнением выходного буфера и блокировки. Команда Lynx предположительно производит больше выходов и, следовательно, ударяет эту проблему.