2009-05-18 91 views
1

我有兩個servlet運行在不同的tomcat服務器上。從另一個servlet調用servlet

我試圖從servlet2以下面的方式調用一個servlet1,並想寫一個對象到輸出流。

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

問題是我無法命中servlet?我無法弄清楚我錯過了什麼。

回答

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 2012-09-13 06:28:37

1

你得到的錯誤是什麼?檢查地址是否正確。如果遠程服務器在80以外的端口上運行,請在構建URL時考慮這一點。

也可能我建議使用HttpClient而不是URLConnection。

+0

我沒有得到任何異常,每行都成功執行。此外,該servlet正在運行在我提到的代碼中傳遞的確切url上。 – 2009-05-18 05:51:31

6

您必須通過創建一個url.connect()連接之前,你可以讀取/發送數據。這是反直覺的,因爲名字openConnection()表明,它確實已經但是文檔說:

一般而言,創建一個URL連接是一個多步驟的過程:

  1. openConnection()
  2. 操縱影響與遠程資源連接的參數。
  3. connect()
  4. 與資源交互;查詢標題字段和內容。

這就是爲什麼getExpiration()使得它的工作:它爲你調用connect()