Вызов почты сервлета из другого сервлета - PullRequest
6 голосов
/ 15 октября 2011

Мне нужно вызвать метод POST сервлета из другого сервлета и передать BLOB-объект в параметрах сервлета. Это возможно, если да, то как это можно сделать. PS: я не могу использовать Apache HttpClient

Ответы [ 3 ]

8 голосов
/ 16 октября 2011

Вам нужно создать и отправить HTTP-запрос самостоятельно.Вы не можете использовать forward / redirect / include, потому что хотите изменить метод с GET на POST и отправить запрос multipart/form-data.

Поскольку HttpClient (и другие сторонние библиотеки?), Очевидно, не вариант, лучше всего использовать стандартный API Java SE, предоставляемый java.net.URLConnection.Короткая история: Использование java.net.URLConnection для запуска и обработки HTTP-запросов Внизу вы можете найти пример multipart/form-data.

Обратите внимание, что эта проблема не относится только к сервлетам,Другими словами, вы должны иметь возможность выполнять этот код в простом ванильном Java-приложении с помощью метода main().Это позволяет легче тестировать и настраивать.Как только вы заставите его работать, просто позвольте сервлету выполнить тот же кусок кода.


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

7 голосов
/ 15 октября 2011

Вы можете отправить диспетчер другому сервлету в вашем приложении и переслать его или включить его, как подсказывает @Ryan. Код должен быть примерно таким внутри вашего первого сервлета:

ServletContext context = this.getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher("/otherurltoservlet");

// change your request and response accordingly

dispatcher.forward(request, response);
1 голос
/ 15 октября 2011

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

...