#java #servlets #httpurlconnection
#java #сервлеты #httpurlconnection
Вопрос:
Из сервлета Java на Tomcat я отправляю сообщение во внешнее приложение, которое запускает «задание» на основе «сообщения», которое я отправляю в сообщении (сообщение отправляется из HTML-формы). Внешнее приложение отвечает на мой пост, сообщая, что «Задание было отправлено успешно» или «Задание не было отправлено успешно». Внешнее приложение представляет собой приложение flask / python, которое запускает «задание», а затем может отправлять обновления обратно на мой сервер.
Как мне затем получать более поздние обновления от внешнего приложения относительно хода выполнения задания или завершения / сбоя задания?
Я использую HttpURLConnection для отправки запроса post во внешнее приложение:
public class Post extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
InputStream input = null;
try {
String message = new String();
// Data to be posted
String getMessage = request.getParameter("Message");
String USER_AGENT = "Mozilla/5.0";
String url1 = "http://xx.xx.xx.xx:8080/GetPost";
URL obj1 = new URL(url1);
HttpURLConnection con1 = (HttpURLConnection) obj1.openConnection();
// add request header
con1.setRequestMethod("POST");
con1.setRequestProperty("User-Agent", USER_AGENT);
con1.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
// Send post request
con1.setDoOutput(true);
DataOutputStream wr1 = new DataOutputStream(con1.getOutputStream());
wr1.writeBytes(getMessage);
wr1.flush();
wr1.close();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Хотя я читаю ответ post (код здесь не включен) Я не знаю, как получать более поздние обновления из внешнего приложения. Открыт для всех предложений, спасибо.
Ответ №1:
Я не понимаю ваших потребностей, но могу вам посоветовать: сервлет отображает ссылку, к которой обращается внешняя программа для возврата соответствующей информации (например, о ходе работы). Может быть, вы сможете сообщить мне более подробную информацию.
Комментарии:
1. Мы с моим партнером переносим наше программное обеспечение для обработки изображений с настольного компьютера на браузерную систему. Я пишу интерфейс на javascript, размещенный на Tomcat. Он пишет серверную часть на Python / flask. Интерфейс позволяет пользователям выбирать входные наборы данных, задавать параметры и отправлять запрос на задание обработки изображений на серверную часть. Серверная часть отправляет ответ, указывающий, было ли задание отправлено успешно или нет, но выполнение самого задания может занять несколько часов.
2. Серверная часть может отправлять последующие сообщения во внешнюю часть, скажем, по завершении задания, но я не знаю, как перехватывать и обрабатывать эти сообщения из внешней части, особенно через несколько часов после отправки первоначального запроса на задание.
3. Теперь я понимаю ваши потребности. На самом деле это очень легко решить. Что вам нужно решить, так это проблему двусторонней связи. Существует много решений: 1. Интерфейс циклически отправляет запросы на статус обработки запросов с интервалом в X минут. 2. Установите канал WebSocket, сервер напрямую отправляет данные во внешний интерфейс, а интерфейс захватывает и обрабатывает их.
4. Спасибо. 2) кажется более подходящим. Мне непонятна разница между сокетами и веб-сокетами. Есть какие-нибудь догадки?