2009-05-18 2 views
1

У меня есть два сервлета, которые работают на разных серверах 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(); 

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

ответ

1

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

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(); 
+0

Для новых посетителей это может помочь - http://stackoverflow.com/questions/4844535/why-do-you-have-to-call-urlconnectiongetinputstream-to-be-able-to-write-out-to – Gyan

1

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

Также я предлагаю использовать HttpClient вместо URLConnection.

+0

Я не получаю никакого исключения, каждая строка выполняется успешно. Также сервлет работает на точный url, который я передаю в упомянутом коде. –

6

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

В общем, создавая соединение с URL является многоступенчатым процессом:

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

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

Смежные вопросы