Вызов doPost в другом веб-приложении с переадресацией Req. - PullRequest
0 голосов
/ 27 января 2011

У меня есть 2 веб-приложения, нет внешнего интерфейса (т.е. HTML / JSP) ни в одном.Оба имеют по одному сервлету.
Позволяет называть их WebApp1 / WebApp2 и ServiceServlet1 / ServiceServlet2.
У меня есть 2 файла war, WebApp1.war и WebApp2.war, и оба развернуты.

Я вызываю ServiceServlet1непосредственно из браузера с помощью -
http://localhost:8080/WebApp1/ServiceServlet1
Очевидно, будет вызван метод doGet (POST связан только с FORM, исправьте меня, если я ошибаюсь).
ServiceServlet1 - это что-то вроде -

    public class ServiceServlet1 extends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest httpRequest, HttpServletResponse httpResponse)
       throws ServletException, IOException {
      doPost(httpRequest, httpResponse);
     }

     @Override
     protected void doPost(HttpServletRequest httpServletRequest,
       HttpServletResponse httpServletResponse) throws ServletException,
       IOException {
      RequestDispatcher requestDispatcher;

      try {
// Process something
       requestDispatcher = getServletContext().getRequestDispatcher("/WebApp2/ServiceServlet2");
       requestDispatcher.forward(httpServletRequest, httpServletResponse);
      } catch (IOException ioException) {
       ioException.printStackTrace();
      } catch (ServletException servletException) {
       servletException.printStackTrace();
      }
     }
    }

По сути, мне нужно назвать doPost() из ServiceServlet2
Я пробовал несколько разных способов с httpReq.getRequestDispatcher(), sendRedirect и т. Д., Но до сих пор не получилось.

Так как я могу это сделать?

Спасибо.

Ответы [ 2 ]

1 голос
/ 27 января 2011

В дополнение к ответу ckuetbach вы не можете изменить метод запроса при отправке запроса. Если второй сервлет нельзя изменить так, чтобы он выполнял ту же бизнес-логику и на doGet(), то вы должны самостоятельно запустить POST-запрос программно.

HttpURLConnection connection = (HttpURLConnection) new URL("http://localhost/WebApp2/ServiceServlet2").openConnection();
connection.setRequestMethod("POST");
InputStream response = connection.getInputStream();
// ... Write to OutputStream of your HttpServletResponse?

Смотри также:

0 голосов
/ 27 января 2011

Два сервлета не используют один и тот же Classloader, потому что они находятся в разных ´ * .WAR´-файлах.

Насколько я знаю, у вас есть шансы сделать то, что вы хотите:

  1. Отключить разделение загрузчика классов в tomcat (я никогда не делал этого tomcat)
  2. Переупаковать два приложения в одном *.WAR
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...