У меня есть два веб-приложения, говорят App1 и App2. Я хочу назвать сервлет, который находится в App2 от сервлета в App1. Я использую URLConnection для этого. Я могу передать параметры сервлету в App2 также, и я также могу получить ответ от сервлета как строка. Но я хочу отправить объекты Java от сервлета в App2 и получить их в сервлете App1. Как достигнуть этого?
Используйте Сериализацию
Вместо отправки HTML вы будете отправлять потоки объектов.
Просто имейте в виду, чтобы добавить дополнительную безопасность, вы не хотите, чтобы какой-то внешний источник вставлял зараженные объекты в ваши вызовы.
Зависит.
Если эти веб-приложения работают на физически одном и том же веб-сервере в одном и том же servletcontainer, то просто установите его как атрибут запроса и передайте запрос другому контексту:
request.setAttribute("name", object);
ServletContext app2 = getServletContext().getContext("app2");
app2.getRequestDispacher("servletUrl").forward(request, response);
Другой контекст сможет получить объект следующим образом:
Object object = request.getAttribute("name");
Это требует только настройки сервера, чтобы контексты были доступны друг другу. Как это сделать, зависит от servletcontainer. Например, в Tomcat достаточно установить crossContext
атрибут
элемента webapp в true
.
<Context crossContext="true">
Тогда он будет доступен для других контекстов. Для других серверов обратитесь к документации.
Если эти веб-приложения работают на физически другом веб-сервере, то есть несколько вариантов:
Преобразовать в String и отправить как параметр. При получении преобразуйте обратно в строку. Хорошим форматом для этого является JSON. Google Gson предлагает возможности преобразования между полноценными Java-объектами и JSON и наоборот. Если вы используете GET и URI запроса становится довольно длинным, более 2 КБ, то подумайте об использовании POST вместо GET, иначе URI может быть усечен сервером. Плюсы: лучший сервис с возможностью повторного использования. Минусы: трудно отправлять двоичные данные.
См. также: Преобразование JSON в Java.
Отправьте multipart/form-data
HTTP POST запрос, используя URLConnection
или Apache HttpComponents Client согласно RFC2388 и обработайте его на другой стороне, используя Apache Commons FileUpload. Плюсы: стандартная спецификация, возможность отправки двоичных данных. Минусы: больше кода.
См. также: Как использовать URLConnection.
Сериализация объекта Java, запись его в сыром виде в URLConnection#getOutputStream()
с помощью ObjectOutputStream
и получение его в сыром виде из HttpServletRequest#getInputStream()
и отсериализация с помощью ObjectInputStream
. Плюсы: простота. Минусы: невозможность повторного использования, жесткая связь.
См. также: Объектные потоки и Урок: Сериализация.