Вызов сервлета из другого сервлета - PullRequest
1 голос
/ 18 мая 2009

У меня есть два сервлета, которые работают на разных серверах Tomcat.

Я и пытался вызвать servlet1 из servlet2 следующим образом и хотел записать объект в выходной поток.

URL url=new URL("http://msyserver/abc/servlet1");
URLConnection con=url.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
OutputStream os=con.getOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(pushEmailDTO);
oos.flush();
oos.close();

Проблема в том, что я не могу поразить сервлет? Я не могу понять, чего мне не хватает.

Ответы [ 3 ]

6 голосов
/ 18 мая 2009

Вы должны создать соединение через url.connect(), прежде чем сможете читать / отправлять данные. Это нелогично, поскольку имя openConnection() предполагает, что оно уже делает это, но в документах говорится:

Как правило, создание соединения с URL-адресом является многошаговым процессом:

  1. openConnection()
  2. Управление параметрами, которые влияют на подключение к удаленному ресурсу.
  3. подключение ()
  4. Взаимодействовать с ресурсом; поля и содержимое заголовка запроса.

Вот почему getExpiration() заставляет его работать: он вызывает connect() для вас.

1 голос
/ 18 мая 2009

Я не могу понять, но это сработало, добавив в код следующую строку.

con.getExpiration();

как это

URL url=new URL("http://msyserver/abc/servlet1");
URLConnection con=url.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.getExpiration();//<----------
OutputStream os=con.getOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(pushEmailDTO);
oos.flush();
oos.close();
1 голос
/ 18 мая 2009

Какую ошибку вы получаете? Проверьте, что адрес правильный. Если удаленный сервер работает через порт, отличный от 80, учтите это при создании URL-адреса.

Можно также предложить использовать HttpClient вместо URLConnection.

...