2013-06-25 6 views

ответ

0

Лучший способ сделать найти реальное местоположение файла внутри веб-приложение является использование ServletContext.getRealPath (см http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath(java.lang.String))

Вы можете получить доступ к этому объекту из сеанса ...

+0

ОК, спасибо, это работает – user2519456

1

Te следующий подход может работать:

1) Подготовить полный путь исполняемого файла:

ServletContext context = getContext(); 
String fullPath = context.getRealPath("/WEB-INF/classes/executable"); 

2) Execute, как вы обычно делаете это:

String[] cmd = { fullPath /*[...] arguments */}; 
Process p = Runtime.getRuntime().exec(cmd); 
p.waitFor(); 

Это упрощенный пример; вы также можете узнать больше о ProcessBuilder.

+0

ОК, спасибо, но у меня есть другие другие проблемы, разрешенные по-другому – user2519456

+0

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

1

Это плохая идея. Представьте себе, что ваш .war packege должен работать практически на любом сервере («.war - независимая от платформы»), а ваш .exe-файл скомпилирован только для одной архитектуры.

Лучше должен выполнять ваш .exe как внешнюю программу только для отдельной независимой от платформы и зависящей от платформы части. Затем в java вы можете протестировать операционную систему и на этой основе запустить желаемую программу externel.

Прочитано this link с похожим вопросом.

+0

ОК, спасибо, отличная идея! Я делаю это таким образом – user2519456

Смежные вопросы